線程的生命週期(線程狀態)

線程可以處於五種狀態之一。 根據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()方法退出時,線程處於終止或死亡狀態。