Java信号量+调用acquire()时不持有同步锁

标签 java multithreading java.util.concurrent

我无法理解链接 JavaWorld 上提供的以下行的含义

No synchronization lock is held when acquire() is called because that would prevent an item from being returned to the pool.

请帮助我理解这一点。

最佳答案

在文章和代码解释的上下文中,上面的行表示每当调用 acquire() 方法时,它实际上不会锁定它尝试的资源> 获取。为什么会这样呢?

信号量就像 sleep 锁。当任务尝试获取已持有的信号量时,信号量会将任务放入等待队列并使任务进入休眠状态。

因为从信号量的使用来看,您正在请求获取锁,并且在队列中等待。只有当你真正获得资源时,你才会获得锁。

关于Java信号量+调用acquire()时不持有同步锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819968/

相关文章:

java - 确定哪个线程获得了同步 key

c++ - 打破 OpenMP 部分和任务

java - 如何在 JMockit 中正确模拟私有(private) ExecutorService 的提交方法

动态扩展线程数的 Java ExecutorService

java - JPanel 布局图像截断

java - 有没有可能的方法从 OnClickListener 方法检索 ArrayList 值并将其保存在其父方法中?

java - 具有最大值和最小值的桶排序

java - 卸载 Android Studio 会删除我的项目吗?

java - 如何在java中的抽象类中实现接口(interface)并扩展线程

java - 为什么 invokeAll 会因池大小有限的 ExecutorService 而失败