【问题标题】:Java JVM profiling, thread status - what does "Monitor" status mean?Java JVM 分析,线程状态 - “监视器”状态是什么意思?
【发布时间】:2011-10-06 00:45:48
【问题描述】:

我用visualVM连接一个多线程Java应用,线程有4种状态,分别是running、sleeping、wait、Monitor。这个监控状态是什么意思?等待和监控有什么区别?

【问题讨论】:

    标签: java multithreading jvm


    【解决方案1】:

    这些状态与Thread.State 枚举中提到的相同。正如文档所说,“等待”是指:

    由于调用以下方法之一,线程处于等待状态:

    • Object.wait 没有超时
    • Thread.join 没有超时
    • Lo​​ckSupport.park

    "Monitor" 是 BLOCKED 状态,此时线程正在等待获取对象上的锁(因为它试图进入 synchronized 块或方法,而另一个线程已经持有相关的锁)。

    【讨论】:

    • 了解该主题的新手(如 OP)可能会有所帮助,以了解“监视器”在此处和文档中用作“锁定”的同义词。
    • 是否知道哪个同步对象(或代码行)是导致线程被阻塞/监控的对象?
    • @user123321 您可以进行线程转储。 (“线程”选项卡右上角的按钮。)在那里您可以看到线程试图同步的对象以及哪个线程持有锁。
    • 截图中的sleepingwaiting有什么区别?!
    【解决方案2】:

    Monitor 意味着线程正在等待获得一个对象的锁定。例如,当一个线程正在运行一个同步方法,而另一个线程试图在同一个对象上调用它时,在该方法的第一次调用完成之前,它将无法调用。这是因为第一个线程对该对象有一个监视器或锁,所以第二个线程必须等到它被释放。

    来自Oracle Threading Tutorials

    “同步是围绕一个称为内在锁或监视器锁的内部实体构建的。(API 规范通常将此实体简称为“监视器”。)内在锁在同步的两个方面都发挥作用:强制排他访问对象的状态并建立对可见性至关重要的先发生关系。”

    【讨论】:

      【解决方案3】:

      那不是“监控”状态...它表示线程处于Thread.State.BLOCKED 状态。我看到还有一个很好的答案,我只是将您指向this link以获得更深入的解释

      【讨论】:

        猜你喜欢
        • 2018-07-05
        • 2017-03-08
        • 2011-08-26
        • 1970-01-01
        • 2011-04-29
        • 2021-07-03
        • 2011-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多