如果已经获取锁的线程出现异常,有没有任何方法可以中断所有等待锁的线程?
我认为没有什么好办法。
如果创建了ReentrantLock
的子类,则该类可以调用getQueuedThreads()
,迭代生成的集合,并对每个集合调用interrupt()
。然而,这可能充满了种族条件。例如,如果在您执行此操作时另一个线程试图获取锁,则不能保证您会看到该线程。
第二个问题是确定在哪里以及通过什么方式检测到异常。