
我使用visualVM连接一个多线程Java应用程序,线程有4种状态,即运行、睡眠、等待、监控。此监控状态意味着什么?wait和Monitor的区别是什么?
发布于 2011-07-15 18:07:47
这些状态与Thread.State枚举中提到的状态相同。“等待”意味着,正如文档所说的那样:
由于调用以下方法之一,线程处于等待状态:
不带timeout
的
“BLOCKED”是监视器状态,在这种状态下,线程正在等待获得对象上的锁(因为它试图进入一个监视器块或方法,而另一个线程已经持有相关的锁)。
发布于 2011-07-15 18:11:47
这不是“监控”状态...它指示线程处于Thread.State.BLOCKED状态。我看到了另一个很好的答案,我会告诉你this link的更深层次的解释
发布于 2011-07-15 18:48:52
Monitor将意味着线程正在等待获得对象上的锁。例如,当一个线程正在运行一个同步的方法,而另一个线程试图在同一对象上调用它时,它将无法调用它,直到该方法的第一次调用完成。这是因为第一个线程在该对象上有一个监视器或锁,所以第二个线程必须等待,直到它被释放。
来自Oracle Threading Tutorials
“同步是围绕称为内部锁或监视器锁的内部实体构建的。( API规范通常将此实体简称为”监视器“。)内部锁在同步的两个方面都起着作用:强制独占访问对象的状态和建立对可见性至关重要的发生前关系。”
https://stackoverflow.com/questions/6705400
复制相似问题