如何以编程方式查找所有线程持有的锁

时间:2012-03-21 10:33:27

标签: java thread-dump

通过调用Thread.getAllStackTraces()很容易从Java程序输出threaddump。我有时在JSP中使用它来轻松诊断问题。但是,您需要找出的另一个重要信息是线程保留哪些锁以及阻塞线程正在尝试获取哪些锁。有没有办法通过Java API获取此信息?我发现的唯一东西是Thread.holdsLock,但这只有在你知道可能被锁定的所有对象时才有用,并且不会告诉你被阻塞的线程试图获取哪些锁。

(当然,您可以使用工具创建一个threaddump来获取此信息,但如果系统不在您自己的计算机上,则通常不容易使用此选项。)

2 个答案:

答案 0 :(得分:3)

结帐ThreadMXBean#getThreadInfo()。这可能就是你所需要的。

答案 1 :(得分:1)

我在一段时间后写了similar answer,使用管理扩展做了类似的事情。

相关问题