Java線程的狀態學習

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(終止狀態)
    線程執行結束後,會處於終止狀態直到銷燬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章