Thread?類中的線程狀態:
public enum State {NEW,//新建RUNNABLE,// 執行態BLOCKED, //等待鎖(在獲取鎖的池子里)WAITING,//等待狀態TIMED_WAITING,//定時等待TERMINATED; //終止 }
創建狀態(NEW):當一個線程創建以后,就處于創建狀態。Thread? ?th= new?Thread(()->{ });
等待鎖(BLOCKED):當線程調用 th.start()?方法,表明該線程具備獲取鎖的資格,進入等待鎖的池子中。
可運行狀態:當線程?th?獲取到鎖之后就進入該狀態(該狀態并不存在Thread?類中,但是操作系統是否執行線程,是根據是否分配時間片來決定的)。
執行態(RUNNABLE):當可運行態的線程?th?獲取到cpu的時間片以后就進入執行。
終止態(TERMINATED):線程執行完畢,或者出現異常。
阻塞狀態:在?Thread?源碼里沒有改狀態但是在《操作系統原理》中線程是存在該狀態的。阻塞態的線程是沒有釋放自己本身持有的鎖(例如線程運行時需要外部I/O資源,打印機、調用sleep()方法。)只是由于外部提出了干預,等外部事件執行完畢后,可直接進入可運行狀態。
等待狀態(WAITING): 一個處于運行狀態的線程還可能調用wait()方法、該方法會使調用的線程釋放對象鎖釋,所以線程將進入等待獲取鎖的隊列里面。join()?方法同理,join()方法底層使用的wait(),只不過Join()方法作用于當前執行的線程中。通過調用notify()或notifyAll()這兩個方法來喚醒線程然后進入鎖池狀態。進入鎖池狀態以后繼續參與鎖的競爭。
定時等待狀態(TIMED_WAITING):調用?帶參數的wait(long num)?方法。該方法等定時一到自動會喚醒線程然后進入鎖池狀態。進入鎖池狀態以后繼續參與鎖的競爭。
掛起狀態:當一個處于運行狀態的線程調用了suspend()方法以后,它就會進入掛起狀態(這一方法已經過時不建議使用)。掛起狀態的線程也沒有釋放對象鎖,它需要調用resume()方法以后才能恢復到可運行狀態。將線程掛起容易導致程序死鎖。
?