二、執行緒的生命週期
執行緒的生命週期有新建(New)、就緒(Runnable)、執行(Running)、阻塞(Blocked)和死亡(Dead)5種狀態。如下圖所示:
1、新建狀態(New):
實現Thread類,繼承Runnable介面或Callable介面
2、就緒狀態(Ready):
呼叫執行緒的 start() 方法,不一定會立即執行,可能需要等待CPU分配時間片。
進入就緒狀態的幾種方式:
1、呼叫start()方法
2、呼叫了notify()或notifyAll()或unPark()
3、yield方法
4、JVM將本身執行緒切換到其他執行緒
3、執行狀態(Runable):
Cpu分配時間片開始執行
4、阻塞狀態(Blocked):
進入阻塞狀態的幾種方式:
1、sleep()方法
2、wait()方法
3、join()方法
4、IO阻塞,read write等
5、執行緒等待synchronized隱式鎖的狀態
等待狀態(Waiting):
發生在呼叫以下幾個方法時:
1、不帶引數的Object.wait()
2、不帶引數的Thread.join()
3、LockSupport.park()
超時等待(Timed-Waiting):
與wait狀態不同在於不會一直等待,而是等待指定的時間,超時則繼續執行
發生在呼叫以下幾個方法時:
1、Thread sleep(long millis)
2、Object.wait(long timeout)
3、Thread.join(long timeout)
4、LockSupport.parkNanos()
5、LockSupport.parkUntil()
5、結束狀態(End):
當執行緒執行完畢,也就是run()方法執行完成或異常退出的方式,即死亡
執行緒生命週期的詳細圖: