我需要实现以下方案
ThreadN的命运并不重要。
我应该使用哪些类(来自java.util.concurrent?)?
答案 0 :(得分:2)
我认为您可以基于Semaphore
实现此功能,但您必须通过设置获取锁定时的时间戳,定期检查并中断持有锁定的线程来实现监视功能,如果它是举行太久了。
LockSupport
课程看起来也有帮助。
答案 1 :(得分:0)
Afaik你不能。
在Java中锁定是合作的 - 如果线程获取对象的锁定,则无法强制它从另一个线程释放锁定。
所有java.util.concurrent类都基于Java锁定功能(synchronize / wait / notify)构建,因此它们没有这样的功能。
你应该做的是编写ThreadN,以便偶尔释放一个锁。您可以使用基本锁定构造(synchronize / wait / notify)通过添加一个原子变量(boolean)来表明另一个线程需要锁定。然后ThreadN将释放锁。
或者使用更高级别的java.util.concurrent类,例如Lock。