我使用visualVM连接一个多线程Java应用程序,线程具有4个状态,即运行,睡眠,等待,监视。此监视状态是什么意思?等待和监控之间有什么区别?
Answers:
这些状态与Thread.State
枚举中提到的相同。如文档所述,“等待”是指:
由于调用以下方法之一,线程处于等待状态:
- Object.wait没有超时
- Thread.join没有超时
- LockSupport.park
“监视器”是BLOCKED
线程正在等待获得对象锁的状态(因为它试图synchronized
在另一个线程已经持有关联锁的同时输入块或方法)。
sleeping
,并waiting
在屏幕截图所示?!
Monitor表示线程正在等待获得对象上的锁。例如,当一个线程正在运行一个同步方法而另一个线程试图在同一个对象上调用它时,直到该方法的第一次调用完成后,该线程才能执行。这是因为第一个线程在该对象上具有监视器或锁,因此第二个线程必须等待直到释放。
“同步是围绕内部实体(称为内部锁或监视器锁)构建的。(API规范通常将这个实体简称为“监视器”。)内部锁在同步的两个方面都起作用:强制独占访问对象的状态并建立对可见性至关重要的先于关系。”