Java 如何通过API查看线程在等待什么监视器?

Java 如何通过API查看线程在等待什么监视器?,java,multithreading,junit,monitor,Java,Multithreading,Junit,Monitor,我们有一个junit测试运行程序,如果一个测试挂起,它将超时。现在我想通过API创建一个线程转储 我知道我可以通过Thread.getAllStackTraces()请求stacktraces。但是控制台上的线程转储包含更多的信息,比如线程正在等待的监视器 是否有API请求线程正在等待的监视器?您可以使用JMX创建线程转储 有关示例,请参见。该类支持获取锁定的监控器。JDK 6文档包含一节关于JVM MBean的编程监控。 我从未使用过它们,也无法向您提供示例代码,但它肯定会给您一个开始 我

我们有一个junit测试运行程序,如果一个测试挂起,它将超时。现在我想通过API创建一个线程转储

我知道我可以通过Thread.getAllStackTraces()请求stacktraces。但是控制台上的线程转储包含更多的信息,比如线程正在等待的监视器


是否有API请求线程正在等待的监视器?

您可以使用JMX创建线程转储


有关示例,请参见。该类支持获取锁定的监控器。

JDK 6文档包含一节关于JVM MBean的编程监控。 我从未使用过它们,也无法向您提供示例代码,但它肯定会给您一个开始


我希望这会有所帮助,如果你能分享你的研究成果,这将非常有帮助。

我不清楚-你想通过编程还是手动完成?如果你生成所有堆栈跟踪,你看不到线程在哪里等待吗?我想API是清楚的。我想用编程的方式来做。如果发生超时,我希望在测试服务器的日志中写入转储。测试服务器在终止时不应冻结。手动操作是不可能的,没关系。绝对是API=以编程方式。我只是不确定我们是否意见一致。