天天看點

線程的生命周期和觸發的機制

線程的生命周期和觸發的機制

java線程的五種基本狀态

1.建立狀态(new):當線程對象建立後,即進入建立狀态,如Thread t=new MyThread();

2.就緒狀态(Runnable):當調用線程對象的start()方法(t.start()),線程即進入就緒狀态,處理就緒狀态線程,隻是說明目前線程做好了準備,随時準備等待CPU排程執行,并不是說執行了t.start()就會立即執行

3.運作狀态(Running):當CPU開始排程處于就緒狀态的線程時,此時的線程才開始被執行,即進入到運作狀态,PS:就緒狀态是進入運作狀态的唯一入口,也就是說,線程想進入運作狀态,必須先處于就緒狀态

4.阻塞狀态(Blocked):處于運作狀态的線程由于某種原因,暫時放棄對CPU的使用權,停止執行,此時進入阻塞狀态,直到其進入就緒狀态,才有機會再次被CPU調用進入就緒狀态,根據阻塞産生的原因不同,阻塞狀态又可以分為三種:

等待阻塞:運作狀态線程執行wait()

同步阻塞: 線程在擷取synchronized同步鎖失敗(因為鎖被其他線程所占用),它會同步進入同步鎖阻塞

其他阻塞:通過調用線程的sleep()或join()或發送I/O請求時,線程會進入阻塞狀态,當sleep()狀态逾時、join()等待逾時線程終止或者逾時,或者I/O處理完成完畢,線程重新轉入就緒狀态

5.死亡狀态:線程執行完或者因異常退出了run()方法,該線程生命周期

就緒狀态轉為運作狀态:目前線程擷取處理器資源

運作狀态轉為就緒狀态:目前線程調用了yeid()或者在運作過程中失去了處理器資源

運作狀态轉為死亡狀态:目前線程執行完畢或出現異常

ps:當調用線程的yield()方法時,線程從運作狀态轉換為就緒狀态,但接下來CPU排程就緒狀态中的哪個線程具有一定的随機性,是以,可能會出現A線程調用了yield()方法後,接下來CPU仍然排程了A線程的情況。

繼續閱讀