執行緒的生命週期(執行緒狀態)


執行緒可以處於五種狀態之一。 根據sun解釋,執行緒生命週期在java中有以下幾種狀態:初始(NEW)執行(RUNNABLE)阻塞(BLOCKED)等待(WAITING)超時等待(TIMED_WAITING)終止(TERMINATED)

java中執行緒的生命周期由JVM控制,java執行緒狀態如下:

  1. 初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。
  2. 執行(RUNNABLE):Java執行緒中將就緒(ready)和執行中(running)兩種狀態籠統的稱為「執行」。
    執行緒物件建立後,其他執行緒(比如main執行緒)呼叫了該物件的start()方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取CPU的使用權,此時處於就緒狀態(ready)。就緒狀態的執行緒在獲得CPU時間片後變為執行中狀態(running)。
  3. 阻塞(BLOCKED):表示執行緒阻塞於鎖。
  4. 等待(WAITING):進入該狀態的執行緒需要等待其他執行緒做出一些特定動作(通知或中斷)。
  5. 超時等待(TIMED_WAITING):該狀態不同於WAITING,它可以在指定的時間後自行返回。
  6. 終止(TERMINATED):表示該執行緒已經執行完畢。

初始(NEW)

如果建立Thread類的範例但在呼叫start()方法之前,執行緒處於初始(NEW)狀態。

可執行(RUNNABLE)

呼叫start()方法後,執行緒處於runnable狀態,但執行緒排程程式尚未選擇它作為正在執行的執行緒。

執行(Running)

如果執行緒排程程式已選擇它,則執行緒處於執行狀態。

阻塞(BLOCKED)

這是執行緒仍處於活動狀態但當前沒有資格執行的狀態。

終止(TERMINATED)

run()方法退出時,執行緒處於終止或死亡狀態。