Java基礎及提高 之 執行緒的生命週期
生命週期
一個事物從出生的那一刻開始到最終死亡中間的整個過程.
在事物的漫長的生命週期過程中,總會經歷不同的狀態(嬰兒狀態/青少年狀態/中年狀態/老年狀態...).
執行緒也是有生命週期的,也是存在不同的狀態的,狀態相互之間的轉換.
1:新建狀態(new):使用new建立一個執行緒物件,僅僅在堆中分配記憶體空間,在呼叫start方法之前.
新建狀態下,執行緒壓根就沒有啟動,僅僅只是存在一個執行緒物件而已.
Thread t = new Thread();//此時t就屬於新建狀態
當新建狀態下的執行緒物件呼叫了start方法,此時從新建狀態進入可執行狀態.
執行緒物件的
2:可執行狀態(runnable):分成兩種狀態,ready和running。分別表示就緒狀態和執行狀態。
就緒狀態:執行緒物件呼叫start方法之後,等待JVM的排程(此時該執行緒並沒有執行).
執行狀態:執行緒物件獲得JVM排程,如果存在多個CPU,那麼允許多個執行緒並行執行.
3:阻塞狀態(blocked):正在執行的執行緒因為某些原因放棄CPU,暫時停止執行,就會進入阻塞狀態.
此時JVM不會給執行緒分配CPU,直到執行緒重新進入就緒狀態,才有機會轉到執行狀態
阻塞狀態只能先進入就緒狀態,不能直接進入執行狀態.
阻塞狀態的兩種情況:
1):當A執行緒處於執行過程時,試圖獲取同步鎖時,卻被B執行緒獲取.此時JVM把當前A執行緒存到物件的鎖池中,A執行緒進入阻塞狀態.
2):當執行緒處於執行過程時,發出了IO請求時,此時進入阻塞狀態.
4:等待狀態(waiting)(等待狀態只能被其他執行緒喚醒):此時使用的無引數的wait方法,
1):當執行緒處於執行過程時,呼叫了wait()方法,此時JVM把當前執行緒存在物件等待池中.
5:計時等待狀態(timed waiting)
1):當執行緒處於執行過程時,呼叫了wait(long time)方法,此時JVM把當前執行緒存在物件等待池中.
2):當前執行緒執行了sleep(long time)方法.
6:終止狀態(terminated):通常稱為死亡狀態,表示執行緒終止.
1):正常執行完run方法而退出(正常死亡).
2):遇到異常而退出(出現異常之後,程式就會中斷)(意外死亡).
-------------------------------------------------------------------
執行緒一旦終止,就不能再重啟啟動,否則報錯(IllegalThreadStateException).
在Thread類中過時的方法(因為存線上程安全問題,所以棄用了):
void suspend() :暫停當前執行緒
void resume() :恢復當前執行緒
void stop() :結束當前執行緒