java - 如何查看线程正在等待哪个监视器?

标签 java multithreading synchronization profiling wait


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

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

谢谢

最佳答案

首先尝试在等待监视器发生时进行线程转储。有多种方法可以做到这一点,包括 jstackjvisualvmkill -3。 Netbeans 也可能能够为其执行的应用程序执行此操作。

将线程转储文件导入 tda .虽然您仅通过在纯文本编辑器中阅读文件就会发现很多,但这个简单的应用程序可以对线程和监视器进行分组,允许您浏览线程,包括超链接等。看起来很晦涩,但效果很好。

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

关于java - 如何查看线程正在等待哪个监视器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5338357/

相关文章:

java - 如何体现子类的两个对象永不过期?

java - 如何在没有 war 部署的情况下将 Spring Boot 与现有的 Tomcat 一起使用

java - 为 NavigableMap 编写同步线程安全包装器

java - 有没有办法让所有正在运行的线程在 Java 中 sleep ()?

javascript - NodeJs,同步开发模式

java - 对java中的线程感到困惑

java - 如何在 TabLayout 中自定义选定的选项卡指示器?

java - Android AccessibilityService onGesture() 正在禁用触摸

python - 如何并行运行多个 Selenium 驱动程序?

vb.net - 正确关闭在新线程中运行循环的表单