我一直在学习Java的并发性,并且正在查看Java信号量并遇到了问题。我有多个线程试图获取多个锁之一来访问受信号量保护的关键部分,并希望所有未能获取该锁的线程执行特定任务,然后尝试重新获取该锁。每次获取失败时,我都希望线程执行我已经完成的等待任务,完成后再试一次。重复直到获得。在查看Java信号量类的Java文档时,所有的获取方法似乎都以某种方式阻塞一种或另一种方式。我该如何完成我想要的?
使用tryAcquire
:
while(!done) {
if(sem.tryAcquire()) {
// semaphore acquired
done=true
} else {
// Semaphore not acquired, do something else
}
}
tryAcquire
还有另一种形式,带有超时,如果您要等待一段时间然后继续,可以使用它。