我注意到没有isWaiting()方法。是否可以测试是否有任何线程被阻塞等待()特定对象?给定一个Thread对象,是否有可能找到Thread正在等待哪个对象(如果有的话)?
答案 0 :(得分:6)
好吧,对于等待状态,请尝试thread.getState() == Thread.State.WAITING || thread.getState() == TIMED_WAITING
。
至于线程等待的对象,我不确定,但我怀疑你可以在没有本机代码的情况下获得线程所要求的对象。另一方面,即使用纯Java来获取锁定给定对象的线程似乎也是不可能的(参见此处:Programmatically determine which Java thread holds a lock)。
答案 1 :(得分:0)
基本的并发方法可能不足以满足您的需求。您可能想尝试java.util.concurrent包。可以解决您的问题的示例类之一是ReentrantLock。这是线程上完整的tutorial。