JAVA執行緒間的狀態轉換

2021-06-20 12:57:37 字數 983 閱讀 8238

執行緒間的狀態轉換:

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執行緒間的狀態轉換

執行緒間的狀態轉換 1.新建 new 新建立了乙個執行緒物件。2.可執行 就緒 runnable 執行緒物件建立後,其他執行緒 比如main執行緒 呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取cpu 的使用權 3.執行 running 可執行狀態 r...

Java 執行緒的狀態轉換

執行緒可以分為4個狀態 new 新生 runnable 可執行 為了方便分析,還可將其分為 runnable與running。blocked 被阻塞 dead 死亡 img 1,新生線程 2,可執行執行緒 a runnable 一旦呼叫了start方法,就進入到runnable狀態。b runnin...

java 執行緒 執行緒的狀態及其狀態的轉換

new 新建立執行緒,初始態 runnable 可執行狀態,當前狀態的執行緒位於 可執行執行緒池 中,變得可執行,只等待獲取cpu的使用權,即當前執行緒獲得了除cpu以外的所有資源。running 正在執行。此時執行緒獲得了cpu的使用權,執行程式 blocked 阻塞狀態。執行緒因為某種原因放棄了...