java多執行緒 執行緒狀態轉換

2021-09-01 22:35:39 字數 778 閱讀 7593

[img]

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

2. 可執行(runnable):執行緒物件建立後,其他執行緒(比如main執行緒)呼叫了該物件的start()方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取cpu 的使用權 。

3. 執行(running):可執行狀態(runnable)的執行緒獲得了cpu 時間片(timeslice) ,執行程式**。

4. 阻塞(block):阻塞狀態是指執行緒因為某種原因放棄了cpu 使用權,也即讓出了cpu timeslice,暫時停止執行。直到執行緒進入可執行(runnable)狀態,才有機會再次獲得cpu timeslice 轉到執行(running)狀態。阻塞的情況分三種:

(一). 等待阻塞:執行(running)的執行緒執行o.wait()方法,jvm會把該執行緒放入等待佇列(waitting queue)中。

(二). 同步阻塞:執行(running)的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒占用,則jvm會把該執行緒放入鎖池(lock pool)中。

(三). 其他阻塞:執行(running)的執行緒執行thread.sleep(long ms)或t.join()方法,或者發出了i/o請求時,jvm會把該執行緒置為阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入可執行(runnable)狀態。

5. 死亡(dead):執行緒run()、main() 方法執行結束,或者因異常退出了run()方法,則該執行緒結束生命週期。死亡的執行緒不可再次復生。

Java 多執行緒狀態轉換

圖中是執行緒執行的基本狀態 執行緒呼叫start 方法開始後,就進入到可執行狀態,隨著cpu的資源排程在執行和可執行之間切換 遇到阻塞則進入阻塞狀態。二三的狀態圖中只不過執行緒被阻塞的情況分為很多種,後面的圖是細化說明。當乙個執行緒執行了start方法後,不代表這個執行緒就會立即被執行,只代表這個執...

java多執行緒狀態轉換

1 新建狀態 new 新建立了乙個執行緒物件。2 就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。3 執行狀態 running 就緒狀態的執行緒獲取了cpu,執行程式 4 阻塞狀態 blo...

Java多執行緒 執行緒狀態

from 一.執行緒狀態型別 1.新建狀態 new 新建立了乙個執行緒物件。2.就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。3.執行狀態 running 就緒狀態的執行緒獲取了cpu,...