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

时间:2011-07-15 10:01:19

标签: java multithreading jvm

enter image description here

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

3 个答案:

答案 0 :(得分:84)

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

  

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

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

“Monitor”是 BLOCKED 状态,其中线程正在等待获取对象的锁定(因为它正在尝试输入synchronized块或方法而另一个线程已经拥有相关的锁。)

答案 1 :(得分:7)

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

答案 2 :(得分:5)

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

来自Oracle Threading Tutorials

  

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