【问题标题】:How to see what monitor is a thread waiting for?如何查看线程在等待什么监视器?
【发布时间】:2011-07-17 08:07:09
【问题描述】:


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

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

谢谢

【问题讨论】:

    标签: java multithreading synchronization profiling wait


    【解决方案1】:

    听起来您编写的程序不需要同步,而您真正要知道的是,在代码中的哪个位置需要同步率,而不是它锁定的对象。要查找它在代码中的位置,请查看线程转储。 Jconsole/jstack 可以做到这一点。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • ++ 对。每个线程的堆栈应该准确地告诉您它等待的原因。
      猜你喜欢
      • 2011-03-09
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      相关资源
      最近更新 更多