我使用JConsole观看一个帖子,它显示
name: Thread-6
state:BLOCKED sun.misc.Launcher$AppClassLoader@19821f ,owner: Thread-3
blocked Count:199,645 Waited Count: 2,610
199,645和2,610:这是件坏事吗?
答案 0 :(得分:8)
如果您的应用程序未满足您的要求,则基于这些数字,因为存在大量锁定争用。等待是它等待通知(Object.wait())但是阻塞意味着它试图获取一个锁而不能,因为另一个线程持有它。
来自http://geekexplains.blogspot.ca/2008/07/threadstate-in-java-blocked-vs-waiting.html
BLOCKED状态和WAITING / TIMED_WAITING状态之间的区别?
当一个线程调用Object.wait方法时,它会释放所有获取的监视器,并进入WAITING(如果我们调用wait方法的超时版本,则为TIMED_WAITING)状态。现在,当通过notify()或notifyAll()调用同一对象通知线程时,线程的等待状态结束,线程开始尝试重新获得它在等待调用时获取的所有监视器。有一次,可能有几个线程试图重新获得(或者第一次获得)他们的监视器。如果多个线程尝试获取特定对象的监视器,则只有一个线程(由JVM调度程序选择)被授予监视器,而所有其他线程都被置于BLOCKED状态。
答案 1 :(得分:0)
线程被阻止进入或重新进入的总次数 显示器。