以编程方式确定哪个Java线程持有锁
问题内容:
在运行时是否可以以编程方式检查持有给定对象锁的线程的名称?
问题答案:
您只能说出当前线程是否持有普通锁(Thread.holdsLock(Object)
)。没有本机代码,您将无法获得对具有锁的线程的引用。
但是,如果您要对线程进行任何复杂的处理,则可能需要熟悉java.util.concurrent包。该ReentrantLock
确实让你得到它的所有者(但其受保护的方法,所以你必须要扩展这个)。根据您的应用程序的不同,很可能是通过使用并发包,您会发现根本不需要获取锁的所有者。
有一些非编程方法可以找到锁所有者,例如发信号通知JVM向stderr发出线程转储,这对确定死锁的原因很有用。