全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)常見(jiàn)問(wèn)題正文

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

更新時(shí)間:2022-08-03 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

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

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

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

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

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

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

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

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

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

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

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

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!