線程的生命週期和狀態

線程的五個狀態:新建、就緒、運行、阻塞、死亡。

新建狀態:當使用new來新建一個線程時、該線程就處於新建狀態,和其它JAVA中的對象沒有區別,JVM爲其分配內存。

就緒狀態:當線程調用了start方法後,該線程就處於就緒狀態。JVM爲其創建方法調用棧和程序計數器,處於這個狀態的線程並沒有開始運行,只是表示這個線程可以運行了,至於什麼時候運行,由JVM中的線程調度決定。

運行狀態:如果處於就緒狀態的線程獲得了CPU,開始執行run方法中的線程執行體,那麼該線程就處於運行狀態。

阻塞狀態:當發生如下情況,線程將進入阻塞狀態:1、線程調用sleep方法主動放棄所佔用的處理器資源。2、線程調用了一個阻塞式IO方法,在方法返回之前,該線程被阻塞。3、線程試圖獲得一個同步監視器,但該同步監視器被其他線程所持有。4、線程在等待某個通知。5、程序調用了線程的suspend方法將該線程掛起(易導致死鎖)。如果以上的問題解決了,線程將進入就緒狀態,而不是直接進入運行狀態。

死亡狀態:以下情況,線程處於死亡狀態:1、run()或call()方法執行完成,線程正常結束。2、線程拋出一個未捕獲的Exception或Error。3、直接調用該線程的stop()方法來結束該線程(易導致死鎖)。注:線程死亡就是死亡,不能重新被再次執行,也不要重新調用該線程的start方法,將會拋出IllegalThreadStateException。

發佈了24 篇原創文章 · 獲贊 21 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章