線程周期大致分為新建、就緒、運行、阻塞、銷毀等五個階段,本文將從這幾個階段詳細介紹下,希望能夠幫助到你~
1、新建(new)
新建:使用new方法,new出來線程,此時僅僅由JAVA虛擬機為其分配內存,并初始化成員變量的值。此時僅僅是個對象。
2、就緒(runnable)
就緒:就是調用的線程的start()方法后,這時候線程處于等待CPU分配資源階段,誰先搶的CPU資源,誰開始執(zhí)行;
該線程進入就緒狀態(tài),JAVA虛擬機會為其創(chuàng)建方法調用棧和程序計數(shù)器。線程的執(zhí)行是由底層平臺控制, 具有一定的隨機性。
3、運行(running)
運行:當就緒的線程被調度并獲得CPU資源時,便進入運行狀態(tài),run方法定義了線程的操作和功能;為了線程切換后能恢復到正確的執(zhí)行位置,每條線程都有一個獨立的程序計數(shù)器,各條線程之間計數(shù)器互不影響,獨立存儲。
4、阻塞(blocked)
阻塞:在運行狀態(tài)的時候,可能因為某些原因導致運行狀態(tài)的線程變成了阻塞狀態(tài)。
5、銷毀(terminated)
如果線程正常執(zhí)行完畢后或線程被提前強制性的終止或出現(xiàn)異常導致結束,那么線程就要被銷毀,釋放資源。
1、run()/call()方法執(zhí)行完成,線程正常結束;
2、線程拋出一個未捕獲的Exception或Error;
3、直接調用線程的stop()方法結束該線程——該方法容易導致死鎖,通常不建議使用。
以上就是關于線程五個階段生命周期介紹的相關內容。