天天看點

Java 線程狀态轉換

Java 線程狀态轉換

java 一共定義了五種線程狀态,随意一個線程在任意一個狀态有且隻有其中一種狀态。
  • 建立(New):建立狗尚未啟動的線程處于這種狀态
  • 運作(Runable):Runable 包括了作業系統線程狀态中的 Running 和 Reddy,也就是說處于此狀态的線程有可能正在執行,也有可能正在等待 CPU 為它配置設定執行時間
  • 無限期等待(Waiting):處于這種狀态的線程不會被 CPU 配置設定執行時間,它們要等待被其他線程顯示的喚醒,下面的方法會讓線程處于無限期等待
    • 沒有設定 Timeout 參數的 Object.wait() 方法
    • 沒有設定 Timeout 參數的 Thread.join() 方法
    • LockSupport.park() 方法
  • 限期等待(Timed Waiting):處于這種狀态的線程也不會被配置設定 CPU 執行時間,不過無需等待被其他線程顯示的喚醒。在一定的時間後,它們會有系統自動喚醒,以下方法會讓線程處于限期等待
    • Thread.sleep() 方法
    • 設定了 Timeout 參數的 Object.wait() 方法
    • 設定了 Timeout 參數的 Thread.join() 方法
    • LockSupport.parkNanon() 方法
    • LockSupport.parkUntil() 方法
  • 阻塞(Blocked):線程被阻塞了,“阻塞狀态”與“等待狀态”的差別是:“阻塞狀态”在等待着擷取到一個排他鎖,這個事件将在另一個線程放棄這個鎖的時候發生:而“等待狀态”則是在等待一段時間或者喚醒動作的發生。在程式等待進入同步區域的時候,線程将進入這種狀态。
  • 結束(Terminated):已終止線程的線程狀态,線程已經結束執行。
    Java 線程狀态轉換