1、新建狀態(new):新建立了乙個執行緒物件。
2、就緒狀態(runnable):執行緒物件建立後,其他執行緒呼叫了該物件的start()方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。
3、執行狀態(running):就緒狀態的執行緒獲取了cpu,執行程式**。
4、阻塞狀態(blocked):阻塞狀態是執行緒因為某種原因放棄cpu使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。阻塞的情況分三種:
(一)、等待阻塞:執行的執行緒執行wait()方法,jvm會把該執行緒放入等待池中。(wait會釋放持有的鎖)
(二)、同步阻塞:執行的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒占用,則jvm會把該執行緒放入鎖池中。
(三)、其他阻塞:執行的執行緒執行sleep()或join()方法,或者發出了i/o請求時,jvm會把該執行緒置為阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入就緒狀態。(注意,sleep是不會釋放持有的鎖)
5、死亡狀態(dead):執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。
看圖:
Java 多執行緒狀態轉換
圖中是執行緒執行的基本狀態 執行緒呼叫start 方法開始後,就進入到可執行狀態,隨著cpu的資源排程在執行和可執行之間切換 遇到阻塞則進入阻塞狀態。二三的狀態圖中只不過執行緒被阻塞的情況分為很多種,後面的圖是細化說明。當乙個執行緒執行了start方法後,不代表這個執行緒就會立即被執行,只代表這個執...
java多執行緒 執行緒狀態轉換
img 1.新建 new 新建立了乙個執行緒物件。2.可執行 runnable 執行緒物件建立後,其他執行緒 比如main執行緒 呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取cpu 的使用權 3.執行 running 可執行狀態 runnable 的...
Java多執行緒 執行緒狀態
from 一.執行緒狀態型別 1.新建狀態 new 新建立了乙個執行緒物件。2.就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。3.執行狀態 running 就緒狀態的執行緒獲取了cpu,...