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


81

在此处输入图片说明

我使用visualVM连接一个多线程Java应用程序,线程具有4个状态,即运行,睡眠,等待,监视。此监视状态是什么意思?等待和监控之间有什么区别?

Answers:


89

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

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

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

“监视器”是BLOCKED线程正在等待获得对象锁的状态(因为它试图synchronized在另一个线程已经持有关联锁的同时输入块或方法)。


24
刚接触该主题的任何人(例如OP)可能会有所帮助,例如在此处和在文档中知道“监视”用作“锁定”的同义词。
matt b

6
无论如何,是否知道哪个同步对象(或代码行)是导致线程被阻塞/监视的对象?
user123321

3
@ user123321您可以进行线程转储。(“线程”选项卡右上角的按钮。)您可以在其中看到该线程试图与其进行同步的对象以及哪个线程持有该锁。
Fildor

这有什么之间的区别sleeping,并waiting在屏幕截图所示?!
Muhammad Gelbana '19

7

这不是“监视”状态...它指示线程处于该Thread.State.BLOCKED状态。我看到还有一个很好的答案,我将为您指向此链接以进行更深入的说明


5

Monitor表示线程正在等待获得对象上的锁。例如,当一个线程正在运行一个同步方法而另一个线程试图在同一个对象上调用它时,直到该方法的第一次调用完成后,该线程才能执行。这是因为第一个线程在该对象上具有监视器或锁,因此第二个线程必须等待直到释放。

Oracle线程教程

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.