多線程之線程的生命周期


說一下線程的聲明周期?

答:1.新建狀態

  2.就緒狀態

  3.運行狀態

  4.阻塞狀態

  5.死亡狀態

 

具體描述一下每一個狀態?

答:

1.新建狀態:

  用new關鍵字建立一個線程后,該線程對象就處於新建狀態。處於新生狀態的線程有自己的內存空間,通過調用start()方法進入就緒狀態。

2.就緒狀態:  

  處於就緒狀態線程具備了運行條件,但還沒分配到CPU,處於線程就緒隊列,等待系統為其分配CPU。當系統選定一個等待執行的線程后,它就會從就緒狀態進入運行狀態,該動作稱為“CPU調度”。

3.運行狀態  

  在運行狀態的線程執行自己的run方法中代碼,直到等待某資源而阻塞或完成任何而死亡。如果在給定的時間片內沒有執行結束,就會被系統給換下來回到就緒狀態。

4.阻塞狀態

  處於運行狀態的線程在某些情況下,如執行了sleep(睡眠)方法,或等待I/O設備等資源,將讓出CPU並暫時停止自己運行,進入阻塞狀態。

  在阻塞狀態的線程不能進入就緒隊列。只有當引起阻塞的原因消除時,如睡眠時間已到,或等待的I/O設備空閑下來,線程便轉入就緒狀態,重新到就緒隊列中排隊等待,被系統選中后從原來停止的位置開始繼續執行。

5.死亡狀態 

  死亡狀態是線程生命周期中的最后一個階段。線程死亡的原因有三個,一個是正常運行的線程完成了它的全部工作;另一個是線程被強制性地終止,如通過stop方法來終止一個線程【不推薦使用】;三是線程拋出未捕獲的異常。

  

狀態之間的轉換圖:

 

線程進入阻塞狀態的原因有哪些?

答:1.等待I/O流的輸入輸出

  2.等待網絡資源,即網速問題

  3.調用sleep()方法,需要等sleep時間結束

  4.調用wait()方法,需要調用notify()喚醒線程

  5.其他線程執行join()方法,當前線程則會阻塞,需要等其他線程執行完。

 

線程進入死亡狀態的原因有哪些?

答:1.線程正常完成工作

  2.調用stop()方法,強行停止線程

  3.外部原因中斷線程

注意1:

  interrupt方法用於中斷線程。調用該方法的線程的狀態為將被置為"中斷"狀態。
注意2:
  線程中斷僅僅是置線程的中斷狀態位,不會停止線程。需要用戶自己去監視線程的狀態為並做處理。支持線程中斷的方法(也就是線程中斷后會拋出interruptedException的方法)就是在監視線程的中斷狀態,一旦線程的中斷狀態被置為“中斷狀態”,就會拋出中斷異常。

        

 


免責聲明!

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



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