Java線程的學習_線程的生命週期

當線程被創建並啓動以後,它既不是已啓動就進入了執行狀態,也不是一直處於執行狀態,在線程的生命週期中,它要經過新建(New)、就緒(Runnable)、運行(Running)、阻塞(Blocked)和死亡(Dead)五種狀態。當線程啓動後,線程不可能一直霸佔CPU獨自運行,所以CPU需要在多條線程之間切換,於是線程狀態也會多次在運行、阻塞之間切換。

線程狀態轉換圖

由上圖可知道線程的狀態轉換

需要注意的幾個點

-只能對處於新建狀態的線程調用start()方法,否則將引發IllegalThreadStateException 異常。

-啓動線程使用start()方法,而不要使用run()方法,調用start()方法來啓動線程,系統會把run()方法當成線程執行體來處理;但如果調用run()方法,則run()方法會立即執行,而且在run()方法返回之前其他線程無法併發執行——也就是說,系統會把run()方法當做普通方法,線程對象當成普通對象。

-線程會以如下三種方式結束,結束後就處於死亡狀態:

a.run()或call()方法執行完成,線程正常結束
b.線程跑出一個未捕獲的Exception或Error
c.直接調用線程的stop()方法來結束該線程

-對處於死亡狀態的線程調用start()將會引發IllegalThreadStateException 異常。

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