簡述線程的生命周期


線程的生命周期會經歷以下五種狀態:

  新建: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()方法獲得線程名。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM