問題?線程共有幾種狀態?分別都是什麼。
從thread源碼中也可以看到以下這幾種枚舉類型:
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
- 新建狀態(NEW):新建後,尚未調用start()方法的線程狀態。
- 運行狀態(RUNNABLE):包括running和ready
- 無限期等待(WAITING):不會唄分配CPU執行時間,需要被顯式喚醒。 thread.join() 就會使當前線程進入無限期等待的狀態。
- 限期等待(Timed Waiting):在一定時間後會由系統自動喚醒。 thread.sleep(5000);//即爲限期等待。
- 阻塞(BLOCKED):等待獲取排它鎖。
- 結束(Terminated):已終止線程的狀態,線程已經結束執行。
已經結束的線程無法再被喚醒。
如果已經結束後再調用start方法,會拋出IllegalThreadStateException異常。