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