大小为1的信号量最佳选择?

Mor*_*ive 5 java multithreading semaphore locking java.util.concurrent

如果您的资源一次只能访问一次,您可以使用大小为1的信号量,或者只使用一个ReentrantLock实例?

使一方或另一方更好的决定有什么微妙的区别?

Abh*_*k S 7

有区别:

  1. 信号量可以由一个线程获取并由另一个线程释放.这样,一个线程可以发信号通知另一个线程.计数为1的信号量也可用于互斥.另一方面,锁仅用于互斥.
  2. 信号量不可重入.这意味着当许可证耗尽时,线程无法获取信号量,即使它已被同一线程获取.锁可以是可重入的.