首頁常見問題正文

Java培訓(xùn):線程的生命周期及狀態(tài)轉(zhuǎn)換

更新時間:2022-08-03 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在Java中,任何對象都有生命周期。線程也不例外,它也有自己的生命周期。當(dāng)Thread對象創(chuàng)建完成時,線程的生命周期便開始了。當(dāng)run()方法中代碼正常執(zhí)行完畢或者線程拋出一個未捕獲的異常(Exception)或者錯誤(Error)時,線程的生命周期便會結(jié)束。接下來,針對線程生命周期中的五種狀態(tài)分別進行詳細講解,具體如下。

  1.新建狀態(tài)(New)

  創(chuàng)建一個線程對象后,該線程對象就處于新建狀態(tài),此時它不能運行,與其他Java對象一樣,僅僅由Java虛擬機為其分配了內(nèi)存,沒有表現(xiàn)出任何線程的動態(tài)特征。

  2.就緒狀態(tài)(Runnable)

  當(dāng)線程對象調(diào)用了start()方法后,該線程就進入就緒狀態(tài)。處于就緒狀態(tài)的線程位于線程隊列中,此時它只是具備了運行的條件,能否獲得CPU的使用權(quán)并開始運行,還需要等待系統(tǒng)的調(diào)度。

  3.運行狀態(tài)(Running)

  如果處于就緒狀態(tài)的線程獲得了CPU的使用權(quán),并開始執(zhí)行run()方法中的線程執(zhí)行體,則該線程處于運行狀態(tài)。一個線程啟動后,它可能不會一直處于運行狀態(tài),當(dāng)運行狀態(tài)的線程使用完系統(tǒng)分配的時間后,系統(tǒng)就會剝奪該線程占用的CPU資源,讓其他線程獲得執(zhí)行的機會。需要注意的是,只有處于就緒狀態(tài)的線程才可能轉(zhuǎn)換到運行狀態(tài)。

  4.阻塞狀態(tài)(Blocked)

  一個正在執(zhí)行的線程在某些特殊情況下,如被人為掛起或執(zhí)行耗時的輸入/輸出操作時,會讓出CPU的使用權(quán)并暫時中止自己的執(zhí)行,進入阻塞狀態(tài)。線程進入阻塞狀態(tài)后,就不能進入排隊隊列。只有當(dāng)引起阻塞的原因被消除后,線程才可以轉(zhuǎn)入就緒狀態(tài)。

  5.死亡狀態(tài)(Terminated)

  如果線程調(diào)用stop()方法或run()方法正常執(zhí)行完畢,或者線程拋出一個未捕獲的異常(Exception)、錯誤(Error)、線程就進入死亡狀態(tài)。一旦進入死亡狀態(tài),線程將不再擁有運行的資格,也不能再轉(zhuǎn)換到其他狀態(tài)。

分享到:
在線咨詢 我要報名
和我們在線交談!