2011-08-24 25 views
4

我使用的JConsole看一个线程,它显示Java线程中的“阻塞计数”和“等待计数”是什么意思?

name: Thread-6 
state:BLOCKED [email protected] ,owner: Thread-3 
blocked Count:199,645 Waited Count: 2,610 

199645和2610:那是一件坏事?

+1

问题:“这是件坏事吗?”标准答案:“这取决于上下文,请提供更多信息。” –

+0

如果回答您的问题,请您将标记为正确的答案吗? – snowe

回答

7

如果您的应用程序没有运行符合你的要求,根据这些数字,是因为有大量的锁争用。等待是它等待通知(Object.wait()),但被阻止意味着它试图获取一个锁而不能因为另一个线程持有它。

http://geekexplains.blogspot.ca/2008/07/threadstate-in-java-blocked-vs-waiting.html

BLOCKED状态,等待/ TIMED_WAITING状态之间的区别是什么?

当一个线程调用的Object.wait方法,它释放所有获取的监控和(如果我们调用wait方法的超时版本或TIMED_WAITING)状态投入的等待。现在,当线程通过notify()或notifyAll()调用通知相同的对象时,线程的等待状态结束,线程开始尝试重新获得它在等待呼叫时获取的所有监视器。有一段时间,可能有几条线索试图重新获得(或者第一次获得)他们的显示器。如果多个线程尝试获取特定对象的监视器,则只有一个线程(由JVM调度程序选择)被授予监视器,并且所有其他线程都处于BLOCKED状态。

+0

顺便说一下,在我的测试中,时间以秒为单位。 –