Java JVM 分析,线程状态 - “监视器”状态是啥意思?

Posted

技术标签:

【中文标题】Java JVM 分析,线程状态 - “监视器”状态是啥意思?【英文标题】: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。这个监控状态是什么意思?等待和监控有什么区别?

【问题讨论】:

【参考方案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以获得更深入的解释

【讨论】:

以上是关于Java JVM 分析,线程状态 - “监视器”状态是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

JVM

Synchronzied(内置锁)

jvm分析

软件构造第十章

JVM故障分析系列之四:jstack生成的Thread Dump日志线程状态

关于JVM案例分析