java 線程的生命週期

Thread線程的生命週期:

線程的生命週期分爲創建(new)、就緒(Runnable)、運行(running)、阻塞(Blocked)、死亡(Dead)五種狀態



創建(new)

在Java程序中創建線程有幾種方法。每個Java程序至少包含一個線程:主線程。其它線程都是通過Thread構造器或實

例化繼承類Thread的類來創建的。在一個線程對新線程的Thread對象調用start()方法之前,這個新線程並沒有真正

開始執行。

一般常用的兩種構造方法:Thread();Thread(Runnable target)



就緒(Runnable)

處於就緒狀態的線程已經具備了運行條件,即已經啓動了start()方法,但還沒有分配到CPU,處於線程就緒隊列,

等待系統爲其分配CPU。這個過程成爲cpu調度,線程對象一旦獲得cpu就會進入運行狀態。

注意:線程一旦被啓動就不能再啓動,即不能再調用start()方法。



運行(running)、阻塞(Blocked)

處於運行狀態的線程開始執行run()方法。在運行狀態中有很多種線程狀態之間切換的情況,所以此狀態也是線程

生命週期中最複雜的一個狀態。

當發生如下情況線程會進入阻塞狀態:

①、線程調用sleep()方法主動放棄所佔用的系統資源

②、線程調用一個阻塞式IO方法,在該方法返回之前,該線程被阻塞

③、線程試圖獲得一個同步監視器,但更改同步監視器正被其他線程所持有

④、線程在等待某個通知(notify()

被阻塞的線程會在如下情況下進入就緒狀態(重新被激活):

①、sleep()方法睡眠時間已到

②、等待的其他線程或程序持有的“鎖”已被釋放

③、正在等待觸發條件的線程,條件得到滿足

④、等待的操作返回的線程,操作正確返回(wait()



死亡(Dead)

正常死亡:當線程的run()方法執行完畢

非正常死亡:被強制終止;線程拋出未捕獲的異常或Error

在這裏說一種線程被強制終止的方法: 

在拋出的InterruptedException異常中加上break或return,然後調用interrupt()方法即可 

catch (InterruptedException e) {

e.printStackTrace();

break;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章