java線程的生命周期及五種基本狀態


一.線程的生命周期及五種基本狀態

關於Java中線程的生命周期,首先看一下下面這張較為經典的圖:

 

上圖中基本上囊括了Java中多線程各重要知識點。掌握了上圖中的各知識點,Java中的多線程也就基本上掌握了。主要包括:

 

Java線程具有五中基本狀態

 

新建狀態(New):

當線程對象對創建后,即進入了新建狀態,如:Thread t = new MyThread();

 

就緒狀態(Runnable):

當調用線程對象的start()方法(t.start();),線程即進入就緒狀態。處於就緒狀態的線程,只是說明此線程已經做好了准備,隨時等待CPU調度執行,並不是說執行了t.start()此線程立即就會執行;

 

運行狀態(Running):

當CPU開始調度處於就緒狀態的線程時,此時線程才得以真正執行,即進入到運行狀態。注:就     緒狀態是進入到運行狀態的唯一入口,也就是說,線程要想進入運行狀態執行,首先必須處於就緒狀態中;

 

阻塞狀態(Blocked):

處於運行狀態中的線程由於某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀態,直到其進入到就緒狀態,才 有機會再次被CPU調用以進入到運行狀態。根據阻塞產生的原因不同,阻塞狀態又可以分為三種:

 

1.等待阻塞:運行狀態中的線程執行wait()方法,使本線程進入到等待阻塞狀態;

 

2.同步阻塞 : 線程在獲取synchronized同步鎖失敗(因為鎖被其它線程所占用),它會進入同步阻塞狀態;

 

3.其他阻塞 : 通過調用線程的sleep()或join()或發出了I/O請求時,線程會進入到阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。

 

死亡狀態(Dead):

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

 

二. Java多線程的就緒、運行和死亡狀態

 

就緒狀態轉換為運行狀態:當此線程得到處理器資源;

 

運行狀態轉換為就緒狀態:當此線程主動調用yield()方法或在運行過程中失去處理器資源。

 

運行狀態轉換為死亡狀態:當此線程線程執行體執行完畢或發生了異常。

 

此處需要特別注意的是:當調用線程的yield()方法時,線程從運行狀態轉換為就緒狀態,但接下來CPU調度就緒狀態中的哪個線程具有一定的隨機性,因此,可能會出現A線程調用了yield()方法后,接下來CPU仍然調度了A線程的情況。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM