谁能解释一下 Java 中各种同步方法之间的各种区别?
- 同步块(synchronized block)(如监视器?)
- 锁 - Java 并发 lock.lock()/lock.unlock()
- 信号量..?
- Object.wait() & Object.notify()(像 Mutex?)
- 其他类
所以我真的很想知道常用的不同 Java 同步选项是什么,以及它们如何映射到“传统”/理论上的互斥量、信号量、锁和监视器。
干杯!
最佳答案
我将对每个进行简要说明:
- 同步块(synchronized block)是您的平均临界区。没有太多的控制。一次只能有一个线程获取锁,并在同步范围结束时自动释放锁。
- 锁是同步块(synchronized block)的一个更灵活的版本。根据实现的不同,它们可能是可重入的,或者可能支持像
tryLock
这样的操作,它只在锁空闲时尝试获取锁,否则立即返回。需要明确解锁锁。 - 信号量基本上是一个锁,但具有多个线程可以同时进入临界区的附加功能。它基于更一般的“许可”概念进行操作,其中信号量可能具有多个线程想要获取的可用许可。一个线程可以获取一个或多个许可,也可以恢复一个或多个许可。它允许更多地根据“可用资源”而不是“需要保护的代码”来考虑同步。
wait/notify
大致相当于条件变量的概念。同样,它们必须受到同步块(synchronized block)的保护,并且只有在被用作监视器的对象上持有锁时调用它们才能正常工作。
关于java - Java 中各种线程同步选项之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10187577/