我一直在学习java中的并发性,在研究java信号量时遇到了一个问题。我有多个线程试图获取多个锁中的一个,以访问受信号量保护的临界区,并希望所有未能获取锁的线程执行特定任务,然后尝试重新获取锁。每次获取失败时,我都希望线程完成我所做的等待任务,当它完成后,再试一次。重复此步骤,直到获得。查看java信号量类的java文档,所有的acquire方法似乎都以某种方式进行了阻塞。我怎样才能实现我想要的?
发布于 2020-02-18 02:51:02
使用tryAcquire
while(!done) {
if(sem.tryAcquire()) {
// semaphore acquired
done=true
} else {
// Semaphore not acquired, do something else
}
}还有另一个带有超时的tryAcquire变体,如果您想等待一段时间,然后继续,您可以使用它。
https://stackoverflow.com/questions/60268689
复制相似问题