如果信号锁定获取/ tryAcquire失败,如何使Java线程执行其他任务而不是阻塞?

问题描述 投票:1回答:1

我一直在学习Java的并发性,并且正在查看Java信号量并遇到了问题。我有多个线程试图获取多个锁之一来访问受信号量保护的关键部分,并希望所有未能获取该锁的线程执行特定任务,然后尝试重新获取该锁。每次获取失败时,我都希望线程执行我已经完成的等待任务,完成后再试一次。重复直到获得。在查看Java信号量类的Java文档时,所有的获取方法似乎都以某种方式阻塞一种或另一种方式。我该如何完成我想要的?

java multithreading concurrency semaphore critical-section
1个回答
4
投票

使用tryAcquire

while(!done) {
  if(sem.tryAcquire()) {
     // semaphore acquired
     done=true
  } else {
   // Semaphore not acquired, do something else
  }
}

tryAcquire还有另一种形式,带有超时,如果您要等待一段时间然后继续,可以使用它。

© www.soinside.com 2019 - 2024. All rights reserved.