Java中線程的狀態
Java線程狀態共有6種,它就在Thread類中公共枚舉類State中,並且同一時刻,線程只處於一個具體狀態.這只是虛擬機狀態,不映射任何系統線程的狀態!代碼如下:
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
狀態釋義:
-
NEW(新建狀態):
線程處於new完,但是還沒有調用start()方法的狀態; -
RUNNABLE(可運行狀態):
針對操作系統的Running或者Ready狀態,可能是在運行中,也可能是在等待系統分配可運行時間; -
BLOCKED(阻塞狀態):
等待獲取排它鎖的狀態,需要佔有鎖的線程釋放鎖的時候發生; -
WAITING(等待狀態):
導致線程處於等待狀態的方法有下面幾個:
1.不含超時參數的Object#wait()
2.Thread.join()
3.LockSupport#park()
另外,此狀態的線程需要其他線程顯示的喚醒動作,否則處於無限期等待狀態,不會被分配執行時間; -
TIMED_WAITING(超時等待):
線程處於超時等待,到期後,系統會自動喚醒線程,得到執行時間直到任務結束
1.Thread::sleep()方法;
2.設置了Timeout參數的Object::wait()方法;
3.設置了Timeout參數的Thread::join()方法;4.LockSupport::parkNanos()方法;
5.LockSupport::parkUntil()方法。 -
TERMINATED(終止狀態):
線程執行結束後,會處於終止狀態直到銷燬。