• <nav id="dstbx"></nav>

    <nav id="dstbx"></nav>
    1. <form id="dstbx"></form>
    2. <small id="dstbx"></small>

      教育行業A股IPO第一股(股票代碼 003032)

      全國咨詢/投訴熱線:400-618-4000

      Java線程的生命周期包括哪幾種狀態?

      更新時間:2021年11月10日14時26分 來源:傳智教育 瀏覽次數:

      好口碑IT培訓

      在java中,任何對象都要有生命周期,線程也不例外,它也有自己的生命周期。當Thread對象創建完成時,線程的生命周期便開始了,當run()方法中代碼正常執行完畢或者線程拋出一個未捕獲的異常(Exception)或者錯誤(Error)時,線程的生命周期便會結束。線程的整個生命周期可以分為5個階段,分別是新建狀態(New)、就緒狀態(Runnable)、運行狀態(Running)、阻塞狀態(Blocked)和死亡狀態(Terminated),線程的不同狀態表名了線程當前正在進行的活動。在程序中,通過一些操作可以使線程在不同狀態之間轉換,如下圖:

      線程狀態轉化

      上圖中展示了線程各種狀態的轉換關系,箭頭表示可轉換的方向,其中,單箭頭表示狀態只能單向的轉換,例如,線程只能從新建狀態轉換到就緒狀態,反之則不能;雙箭頭表示兩種狀態可以互相轉換,例如,就緒狀態和運行狀態可以互相轉換。通過一張圖還不能完全描述清楚線程各狀態之間的區別,接下來針對線程生命周期中的五種狀態分別進行詳細講解,具體如下。


      1. 新建狀態(New)

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


      2. 就緒狀態(Runnable)

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


      3. 運行狀態(Running)

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

      4.阻塞狀態(Blocked)

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

      下面就列舉一下線程由運行狀態轉換成阻塞狀態的原因,以及如何從阻塞狀態轉換成就緒狀態。

      ·當線程試圖獲取某個對象的同步鎖時,如里該銷被其他線程所持有,則當前線程會進入阻塞狀態,如果想從阻塞狀態進入就緒狀態就必須獲取到其他線程所持有的鎖。

      ·當線程調用了一個阻塞式的I/O方法時,該線程就會進入阻寒狀態,如果想進入就緒狀態就必須要等到這個阻塞的I/O方法返回。

      ·當線程調用了某個對象的wait()方法時,也會使線程進入阻塞狀態,如果想進入就緒狀態就需要使用notify()方法喚醒該線程。

      ·當線程調用了Thread的sleep(long millis)方法時,也會使線程進入阻塞狀態,在這種情況下,只需等到線程睡眠的時間到了后,線程就會自動進入就緒狀態。

      ·當在一個線程中調用了另一個線程的join()方法時,會使當前線程進入阻塞狀態,在這種情況下,需要等到新加入的線程運行結束后才會結束阻塞狀態,進入就緒狀態。

      需要注意的是,線程從阻塞狀態只能進入就緒狀態,而不能直接進人運行狀態,也就是說,結束阻塞的線程需要重新進入可運行池中,等待系統的調度。


      5.死亡狀態(Terminated)

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



      猜你喜歡

      進程和線程的區別和聯系是什么?

      Java中的線程池有哪些?

      java線程休眠的sleep方法詳細介紹

      傳智教育Java培訓課程

      0 分享到:
      神马影院我不卡