當線程被創建並啓動以後,它既不是已啓動就進入了執行狀態,也不是一直處於執行狀態,在線程的生命週期中,它要經過新建(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()方法來結束該線程