Java 併發程式設計(二)執行緒狀態躍遷
阿新 • • 發佈:2019-02-04
執行緒的狀態:
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()方法,該執行緒結束生命週期。