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