2011-08-24 48 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

順便說一下,在我的測試中,時間以秒爲單位。 –