1. 程式人生 > >Java 併發程式設計(二)執行緒狀態躍遷

Java 併發程式設計(二)執行緒狀態躍遷

執行緒的狀態:

1、新建狀態(New)

新建立了一個執行緒物件。
示例:
    Thread t = new Thread();

2、就緒狀態(Runnable)

執行緒物件建立後,其他執行緒呼叫了該物件的start()方法。該狀態的執行緒位於“可執行執行緒池”中,變得可執行,只等待獲取CPU的使用權。即在就緒狀態的程序除CPU之外,其它的執行所需資源都已全部獲得。
示例:
    t.start();

3、執行狀態(Running)

就緒狀態的執行緒獲取了CPU,執行程式程式碼。

4、阻塞狀態(Blocked)

阻塞狀態是執行緒因為某種原因放棄CPU使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。
阻塞的情況分三種:
(1)、等待阻塞:執行的執行緒執行wait()方法,該執行緒會釋放佔用的所有資源,JVM會把該執行緒放入“等待池”中。進入這個狀態後,是不能自動喚醒的,必須依靠其他執行緒呼叫notify()或notifyAll()方法才能被喚醒;
(2)、同步阻塞:執行的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒佔用,則JVM會把該執行緒放入“鎖池”中;
(3)、其他阻塞:執行的執行緒執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該執行緒置為阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者I/O處理完畢時,執行緒重新轉入就緒狀態。

5、死亡狀態(Dead)

執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。

6、執行緒變化的狀態轉換圖如下:

這裡寫圖片描述