【发布时间】:2011-10-06 00:45:48
【问题描述】:
我用visualVM连接一个多线程Java应用,线程有4种状态,分别是running、sleeping、wait、Monitor。这个监控状态是什么意思?等待和监控有什么区别?
【问题讨论】:
标签: java multithreading jvm
我用visualVM连接一个多线程Java应用,线程有4种状态,分别是running、sleeping、wait、Monitor。这个监控状态是什么意思?等待和监控有什么区别?
【问题讨论】:
标签: java multithreading jvm
这些状态与Thread.State 枚举中提到的相同。正如文档所说,“等待”是指:
由于调用以下方法之一,线程处于等待状态:
- Object.wait 没有超时
- Thread.join 没有超时
- LockSupport.park
"Monitor" 是 BLOCKED 状态,此时线程正在等待获取对象上的锁(因为它试图进入 synchronized 块或方法,而另一个线程已经持有相关的锁)。
【讨论】:
sleeping和waiting有什么区别?!
Monitor 意味着线程正在等待获得一个对象的锁定。例如,当一个线程正在运行一个同步方法,而另一个线程试图在同一个对象上调用它时,在该方法的第一次调用完成之前,它将无法调用。这是因为第一个线程对该对象有一个监视器或锁,所以第二个线程必须等到它被释放。
“同步是围绕一个称为内在锁或监视器锁的内部实体构建的。(API 规范通常将此实体简称为“监视器”。)内在锁在同步的两个方面都发挥作用:强制排他访问对象的状态并建立对可见性至关重要的先发生关系。”
【讨论】:
那不是“监控”状态...它表示线程处于Thread.State.BLOCKED 状态。我看到还有一个很好的答案,我只是将您指向this link以获得更深入的解释
【讨论】: