首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中各种线程同步选项之间有什么不同?

Java中各种线程同步选项之间有什么不同?
EN

Stack Overflow用户
提问于 2012-04-17 08:17:17
回答 2查看 1.5K关注 0票数 5

有人能解释Java中各种同步方法之间的不同吗?

同步块(如monitors?)

  • Locks - Java并发lock.lock()/lock.unlock()

  • Semaphores..?

  • Object.wait() & Object.notify() (类似Mutex?)

  • 其他类

)

因此,我真的想知道Java同步选项中常用的是什么,以及它们如何映射到“传统的”/theoretical Mutexs、信号量、锁和监视器。

干杯!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 09:51:34

我将对以下每一项做一个简短的澄清:

  • 同步块是您的平均关键部分。没有多少控制权。只有一个线程可以一次获得锁,当同步作用域结束时,它会自动释放锁。
  • 锁是同步块的一个更灵活的版本。根据实现的不同,它们可能是可重入的,或者可能支持像tryLock这样的操作,如果锁是空闲的,只能尝试获取锁,否则会立即返回。锁需要显式地解锁。

  • ,一个信号量,基本上是一个锁,但是增加了几个线程可以一次进入关键部分的特性。它运行在更一般的“许可”概念上,在这个概念中,一个信号量可能有几个线程想要获取的许可。一个线程可以接受一个或多个许可,并且可以恢复一个或多个许可。它允许更多地从“可用资源”的角度来考虑同步,而不是“需要成为protected".
  • wait / notify的代码大致等同于条件变量的概念”。类似地,它们必须受到同步块的保护,并且只有在被用作监视器的对象上持有锁时才能正确工作。
票数 3
EN

Stack Overflow用户

发布于 2012-04-17 08:26:26

Java具有对线程和同步的原生支持。本机(或低级)同步线程的方法是使用同步块和方法( ==关键部分)、wait()notify()

这种技术允许你做任何你想做的事情,但不幸的是,这种方法有时相当冗长。Doug最初在Apache项目下开发了并发包。然后,该软件包被Sun Microsystems采用。这个包提供了更方便的API。

了解更多详细信息,请查看本文:http://docs.oracle.com/javase/tutorial/essential/concurrency/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10187577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档