Java中各种线程同步选项有什么区别?

Nig*_*olf 5 java multithreading synchronization mutex locking

有人可以解释Java中各种同步方法之间的各种差异吗?

  • Syncornized块(如显示器?)
  • 锁 - Java并发lock.lock()/ lock.unlock()
  • 信号灯..?
  • Object.wait()&Object.notify()(就像Mutex?)
  • 其他课程

所以我真的想知道常用的不同Java同步选项是什么,以及它们如何映射到"传统"/理论互斥锁,信号量,锁和监视器.

干杯!

Tud*_*dor 3

我将对每一项进行简要说明:

  • 同步块是您的平均关键部分。没有给予太多的控制。一次只有一个线程可以获取锁,并且当同步作用域结束时它会自动释放它。
  • 锁是同步块的更灵活的版本。根据实现的不同,它们可能是可重入的,也可能支持诸如tryLock仅在空闲时尝试获取锁的操作,否则立即返回。锁需要显式解锁。
  • 信号量基本上是一个锁,但增加了多个线程可以同时进入临界区的功能。它基于更一般的“许可”概念进行操作,其中信号量可能具有线程想要获取的多个可用许可。一个线程可以获取一个或多个许可,也可以恢复一个或多个许可。它允许更多地根据“可用资源”而不是“需要保护的代码”来考虑同步。
  • wait / notify大致相当于条件变量的概念。同样,它们必须受到同步块的保护,并且只有在用作监视器的对象上持有锁时调用它们才能正常工作。