如何查看线程等待的监视器?

Ste*_*noS 3 java multithreading profiling synchronization wait


我正在使用netbeans和它的分析器来查看线程活动.图表显示,当执行多个工作线程时,线程可以保持多种状态:运行,等待,监视.
我编写了我的java应用程序,以便其工作线程只使用只读变量而不需要同步.
但是,在执行netbeans探查器时,我可以看到我的线程经常处于监视器状态.我想他们正在等待显示器解锁,但我可以想象哪个显示器.

所以,我的问题是:有没有办法了解线程正在等待什么监视器?

谢谢

Tom*_*icz 5

首先尝试在监视器上等待时进行线程转储.有这样做的,包括各种方式jstack,jvisualvmkill -3.Netbeans也可以为它执行的应用程序执行此操作.

让线程转储文件在tda中导入它.虽然您只是通过在纯文本编辑器中读取文件来发现很多,但这个简单的应用程序将线程和监视器分组,允许您浏览线程,包括超链接等.看起来很模糊,但效果很好.

如果您在阅读堆栈跟踪时遇到困难(对于Java开发人员来说这是一项非常重要的技能),请在此处发布一个等待线程.