Java JVM概要分析,线程状态 - "监控"状态意味着什么?

use*_*592 78 java multithreading jvm

在此输入图像描述

我使用visualVM连接多线程Java应用程序,线程有4个状态,即运行,休眠,等待,监视.这种监控状态意味着什么?等待和监视器有什么区别?

Jes*_*per 86

这些状态与Thread.State枚举中提到的相同."等待"意味着,正如文档所说:

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

  • Object.wait没有超时
  • Thread.join没有超时
  • LockSupport.park

"监视"是一种BLOCKED状态,其中线程正在等待获取对象的锁定(因为它试图输入一个synchronized块或方法,而另一个线程已经拥有相关的锁).

  • 对于该主题的新手(如OP),可能有助于知道"监视器"在此处和文档中用作"锁定"的同义词. (24认同)
  • 反正知道哪个同步对象(或代码行)是导致线程被BLOCKED/Monitor的那个? (6认同)
  • @ user123321您可以进行线程转储.("线程"选项卡右上角的按钮.)在那里,您可以看到线程尝试同步的内容以及哪个线程持有锁. (3认同)

Gro*_*eek 7

那不是"监控"状态......它表示线程处于Thread.State.BLOCKED状态.我看到还有另一个好的答案,我只想指出这个链接进行更深入的解释


mog*_*lol 5

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

来自Oracle线程教程:

"同步是围绕一个称为内部锁或监视器锁的内部实体构建的.(API规范通常将此实体简称为"监视器".)内部锁在同步的两个方面都发挥作用:强制执行对同步的独占访问.对象的状态和建立事先发生的关系,这对于可见性至关重要."