![](/img/trans.png)
[英]Why is Java's Semaphore fairness an argument to the constructor rather than the acquire() / tryAcquire() calls?
[英]How can I make a Java thread do a different task rather than block if a semaphore lock acquire/tryAcquire fails?
我一直在学习 Java 中的并发性,正在研究 Java 信号量并遇到了问题。 我有多个线程试图获取多个锁中的一个以访问受信号量保护的临界区,并希望我所有未能获取锁的线程执行特定任务,然后尝试重新获取锁。 每次获取失败时,我都希望线程执行我所做的等待任务,并在完成后重试。 重复直到获得。 查看 java 信号量类的 java 文档,所有获取方法似乎都以某种方式进行某种形式的阻塞。 我怎样才能完成我想要的?
使用tryAcquire
:
while(!done) {
if(sem.tryAcquire()) {
// semaphore acquired
done=true
} else {
// Semaphore not acquired, do something else
}
}
tryAcquire
另一个变体带有超时,如果您想等待一段时间然后继续,则可以使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.