線程根據其生命週期分成一下幾種狀態
- NEW 新建
線程剛創建 - RUNNABLE 可運行
在JVM中正在運行的線程 - BLOCKED 阻塞
線程處於阻塞狀態,等待監視鎖,可以重新進行同步代碼塊中執行 - WAITING 等待
等待狀態 - TIMED_WAITTING 超時等待
調用sleep() join() wait()方法可能導致線程處於等待狀態 - TERMINATED 終止
線程執行完畢,已經退出
1. 狀態詳解
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Qtz0TB5G-1577707691688)(https://note.youdao.com/yws/res/42525/A47006CD0B88496F8F5351C2CE9D212B)]
1.1. NEW
當線程繼承Thread或者實現了Runnable創建了線程對象後,當new線程對象過後線程就進入了初始的狀態。
1.2. RUNNABLE
當線程對象調用了start()方法的時候,線程啓動進入可運行的狀態。就是CPU可以來執行他了,但是不一定會立即執行,需要等到分配給他的時間片段的到來
1.3. WAITING
當線程調用 o.wait()
t.join()
LockSupport.park()
後進入WAITING狀態
1.4. TIMED_WAITTING
當線程調用 Thread.sleep(time)
o.wait(time)
t.join(time)
LockSupport.parkNanos()
LockSupport.parkUntil()
後進入TIMED_WAITTING狀態
當線程調用 o.notify()
o.notifyAll()
LockSupport.unpark()
後退出 TIMED_WAITTING 進入RUNNABLE狀態
1.5. BLOCKED
等待進入同步代碼塊的鎖的時候進入BLOCKED 獲得鎖之後退出BLOCKED並進入RUNNABLE狀態
1.6. TERMINATED
線程執行完成之後進入 TERMINATED