java Thread的狀態分析

lcc發表於2021-09-11

java Thread的狀態分析

執行緒的狀態是比較重要的,因此threadump顯示這些狀態,透過分析這些狀態,可以得到執行緒的執行狀況,發現可能存在的問題。

1、NEW

每個執行緒,在堆記憶體中都有相應的Thread物件。Threadt=newThread();當Thread物件剛剛在堆記憶體中建立時,在呼叫t.start()方法之前,執行緒處於NEW狀態。就這種狀態而言,執行緒與一般java物件沒有什麼不同,只是一個堆記憶體物件。

2、RUNNABLE

這種狀態意味著執行緒具有所有的執行條件,並在執行佇列中準備作業系統的排程或執行。這種狀態下的執行緒相對正常,但是如果執行緒長時間停留在這種狀態下,就不正常了,這表明執行緒執行的時間很長(有效能問題),或者執行緒不能一直執行(有執行緒飢餓問題)。

3、BLOCKED

執行緒等待獲得java物件的監視器(也稱為內建鎖),即執行緒等待進入synchronized保護的方法和程式碼塊。synchronized用於保證原子性,任何時候最多隻能從一個執行緒進入該臨界區域,其他執行緒只能排隊等待。

4、WAITING

處於執行緒狀態,等待事件的發生。只有滿足特定條件,才能獲得執行機會。這個特定的事件通常是另一個執行緒。也就是說,如果沒有特定的事件,那麼處於這種狀態的執行緒一直在等待,無法獲得執行的機會。

5、TIMED_WAITING

在J.U.C中,許多與執行緒相關的類別,都提供了限時版和無限時版的API。TIMED_WAITING意味著執行緒呼叫了限時版的API,等待時間流逝。等待時間過後,執行緒也可以恢復執行。若執行緒進入WAITING狀態,則必須發生特定事件才能恢復執行;而在TIMED_WAITING的執行緒中,如果發生特定事件或時間流逝,則恢復執行。

6、TERMINATED

當執行緒執行完成後,run方法正常返回,或丟擲執行異常而結束時,執行緒將停留在此狀態。此時執行緒只剩下Thread物件,沒什麼用。

以上就是java Thread的狀態分析,希望對大家有所幫助。更多Java學習指路:

本教程操作環境:windows7系統、java10版,DELL G3電腦。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2830045/,如需轉載,請註明出處,否則將追究法律責任。

相關文章