Java 教程
Java 線程的生命周期中,在 Thread 類里有一個枚舉類型 State,定義了線程的幾種狀態(tài),分別有:
各個狀態(tài)說明:
聲明:
public static final Thread.State NEW
實現(xiàn) Runnable 接口和繼承 Thread 可以得到一個線程類,new 一個實例出來,線程就進入了初始狀態(tài)。
聲明:
public static final Thread.State RUNNABLE
2.1. 就緒狀態(tài)
就緒狀態(tài)只是說你資格運行,調(diào)度程序沒有挑選到你,你就永遠是就緒狀態(tài)。
調(diào)用線程的 start() 方法,此線程進入就緒狀態(tài)。
當前線程 sleep() 方法結(jié)束,其他線程 join() 結(jié)束,等待用戶輸入完畢,某個線程拿到對象鎖,這些線程也將進入就緒狀態(tài)。
當前線程時間片用完了,調(diào)用當前線程的 yield() 方法,當前線程進入就緒狀態(tài)。
鎖池里的線程拿到對象鎖后,進入就緒狀態(tài)。
2.2. 運行中狀態(tài)
線程調(diào)度程序從可運行池中選擇一個線程作為當前線程時線程所處的狀態(tài)。這也是線程進入運行狀態(tài)的唯一一種方式。
聲明:
public static final Thread.State BLOCKED
阻塞狀態(tài)是線程阻塞在進入synchronized關(guān)鍵字修飾的方法或代碼塊(獲取鎖)時的狀態(tài)。
聲明:
public static final Thread.State WAITING
處于這種狀態(tài)的線程不會被分配 CPU 執(zhí)行時間,它們要等待被顯式地喚醒,否則會處于無限期等待的狀態(tài)。
5. 超時等待 - TIMED_WAITING
聲明:
public static final Thread.State TIMED_WAITING
處于這種狀態(tài)的線程不會被分配 CPU 執(zhí)行時間,不過無須無限期等待被其他線程顯示地喚醒,在達到一定時間后它們會自動喚醒。
聲明:
public static final Thread.State TERMINATED
當線程的 run() 方法完成時,或者主線程的 main() 方法完成時,我們就認為它終止了。這個線程對象也許是活的,但是,它已經(jīng)不是一個單獨執(zhí)行的線程。線程一旦終止了,就不能復(fù)生。
在一個終止的線程上調(diào)用 start() 方法,會拋出 java.lang.IllegalThreadStateException 異常。
以下實例演示了如何獲取線程的狀態(tài):
以上代碼運行輸出結(jié)果為:
State of thread1 after creating it - NEW State of thread1 after calling .start() method on it - RUNNABLE State of thread2 after creating it - NEW State of thread2 after calling .start() method on it - RUNNABLE State of thread2 after calling .sleep() method on it - TIMED_WAITING State of thread1 while it called join() method on thread2 -WAITING State of thread2 when it has finished it's execution - TERMINATED其他擴展