執行緒可以處於五種狀態之一。 根據sun解釋,執行緒生命週期在java中有以下幾種狀態:初始(NEW) ,執行(RUNNABLE),阻塞(BLOCKED),等待(WAITING),超時等待(TIMED_WAITING)和終止(TERMINATED)。
java中執行緒的生命周期由JVM控制,java執行緒狀態如下:
- 初始(NEW):新建立了一個執行緒物件,但還沒有呼叫start()方法。
- 執行(RUNNABLE):Java執行緒中將就緒(ready)和執行中(running)兩種狀態籠統的稱為「執行」。
執行緒物件建立後,其他執行緒(比如main執行緒)呼叫了該物件的start()方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取CPU的使用權,此時處於就緒狀態(ready)。就緒狀態的執行緒在獲得CPU時間片後變為執行中狀態(running)。 - 阻塞(BLOCKED):表示執行緒阻塞於鎖。
- 等待(WAITING):進入該狀態的執行緒需要等待其他執行緒做出一些特定動作(通知或中斷)。
- 超時等待(TIMED_WAITING):該狀態不同於WAITING,它可以在指定的時間後自行返回。
- 終止(TERMINATED):表示該執行緒已經執行完畢。
初始(NEW)
如果建立Thread
類的範例但在呼叫start()
方法之前,執行緒處於初始(NEW)狀態。
可執行(RUNNABLE)
呼叫start()
方法後,執行緒處於runnable
狀態,但執行緒排程程式尚未選擇它作為正在執行的執行緒。
執行(Running)
如果執行緒排程程式已選擇它,則執行緒處於執行狀態。
阻塞(BLOCKED)
這是執行緒仍處於活動狀態但當前沒有資格執行的狀態。
終止(TERMINATED)
當run()
方法退出時,執行緒處於終止或死亡狀態。