線程的生命周期會經歷以下五種狀態:
新建:new創建線程對象時
就緒:調用start()方法時
運行:調用run()方法時
阻塞:多種原因可導致阻塞
死亡:多種原因
發生以下情況時,線程將進入阻塞狀態:
調用sleep()方法時,此時會放棄它所占用的處理器資源(過了sleep指定時間不再阻塞)
調用一個阻塞式IO方法還沒有返回之前,該線程被阻塞(阻塞IO方法返回后不再阻塞)
試圖獲取一個正被其它線程所持有的同步監視器(拿到監聽器不再阻塞)
等待通知時(notify)(其它線程調用了notify時不再阻塞)
調用suspend()方法將程序掛起時(線程調用resume()方法時撤銷掛起時不再阻塞)
線程死亡情況:
線程正常結束(run或call方法執行完畢)
線程拋出一個未捕獲的Exception或Error
線程自己調用stop()方法(該方法容易導致死鎖)
PS:
如果直接調用run()方法,系統會把該線程對象當成普通對象。
如果直接調用了run()方法,則該線程不再處於新建狀態,不能再次調用start()方法,否則會報IllegalThreadStateException異常
如果直接調用了run()方法,則在run()方法里不能直接通過this.getName()方法獲得線程名。