Java JVM分析,线程状态 – “Monitor”状态是什么意思?
我用visualVM连接一个multithreading的Java应用程序,线程有4个状态,分别是running,sleeping,wait,monitor。 这个监测状态是什么意思? 等待和监视器有什么区别?
这些状态与Thread.State
枚举中提到的相同。 “等待”是指,如文件所述:
由于调用以下方法之一,线程处于等待状态:
- Object.wait没有超时
- Thread.join没有超时
- LockSupport.park
“监视”是BLOCKED
状态,其中线程正在等待获取对象上的锁(因为它试图进入synchronized
块或方法,而另一个线程已经持有关联的锁)。
这不是一个“监视”状态…它表明线程处于Thread.State.BLOCKED
状态。 我看到还有一个很好的答案,我只是指出你对这个链接的更深入的解释
监视器将意味着线程正在等待locking一个对象。 例如,当一个线程正在运行同步方法,而另一个线程尝试在同一个对象上调用它时,直到方法的第一次调用完成后才能够执行。 这是因为第一个线程在该对象上有一个监视器或锁,所以第二个线程必须等待释放。
从Oracle线程教程 :
“同步是围绕被称为内部锁或监视器锁的内部实体构build的(API规范通常将此实体简称为”监视器“。)内部锁在同步的两个方面发挥作用:强制对对象的状态和build立发生在对可见性至关重要的关系之前。“