3 執行緒的狀態轉換

2021-08-09 11:44:27 字數 853 閱讀 4658

1、新建狀態(

new):新建立了乙個執行緒物件。

2、就緒狀態(

runnable

):執行緒物件建立後,其他執行緒呼叫了該物件的

start()

方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取

cpu的使用權。

3、執行狀態(

running

):就緒狀態的執行緒獲取了

cpu,執行程式**。

4、阻塞狀態(

blocked

):阻塞狀態是執行緒因為某種原因放棄

cpu使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。阻塞的情況分三種:

(一)、等待阻塞:執行的執行緒執行

wait()

方法,jvm

會把該執行緒放入等待池中。

(二)、同步阻塞:執行的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒占用,則

jvm會把該執行緒放入鎖池中。

(三)、其他阻塞:執行的執行緒執行

sleep()

或join()

方法,或者發出了

i/o請求時,

jvm會把該執行緒置為阻塞狀態。當

sleep()

狀態超時、

join()

等待執行緒終止或者超時、或者

i/o處理完畢時,執行緒重新轉入就緒狀態。

5、死亡狀態(

dead

):執行緒執行完了或者因異常退出了

run()

方法,該執行緒結束生命週期。

來自

執行緒的狀態轉換

執行緒的狀態轉換是執行緒控制的基礎。執行緒狀態總的可分為五大狀態 分別是生 死 可執行 執行 等待 阻塞。對於執行緒的阻止,考慮一下三個方面,不考慮io阻塞的情況 1.睡眠 2.等待 3.因為需要乙個物件的鎖定而被阻塞。睡眠 thread.sleep long millis 和thread.slee...

執行緒的狀態轉換

從執行緒被建立到執行完畢共經過了五個階段 新建 可執行 執行 等待 阻塞 睡眠 終止。關係圖如下所示 新狀態 new 執行緒以建立,但未呼叫任何方法 可執行狀態 runnable 已呼叫start 方法,進入就緒狀態,或程式剛從等待 阻塞 睡眠狀態回來,等待執行 執行狀態 run 程式在正常執行 等...

執行緒的狀態轉換

執行緒的狀態有 new runnable running waiting timed waiting blocked dead 當執行new thread runnabler 後,新建立出來的執行緒處於new狀態,這種執行緒不可能執行 當執行thread.start 後,執行緒處於runnable狀...