線程是從創(chuàng)建到執(zhí)行完畢,總共有6個狀態(tài), 1. New(新建態(tài)) 當用new操作符創(chuàng)建一個新線程時,如 new Thread(r), 該線程還沒有開始運行。這意味著它的狀態(tài)是new。 2. Runnable(運行態(tài)) 一旦線程調用start()方法,線程就處于runnable狀態(tài)。 3. Blocked(阻塞態(tài)) 受阻塞并等待某個監(jiān)視器鎖的線程處于這種狀態(tài)。 4. Waiting(等待態(tài)) 無限期地等待另一個線程來執(zhí)行。某一特定操作的線程處于這種狀態(tài)。 5.Timed Waiting(計時等待態(tài)) 當線程處于被阻塞或等待狀態(tài)時,它暫時不活動。它不運行任何代碼且消耗最少的資源。直到線程調度器重新激活它。細節(jié)取決于它是怎樣達到非活動狀態(tài)的。 6. Terminated(終止態(tài)) 線程因如下兩個原因之一而被終止: 1) 因為run方法正常退出而自然死亡 2) 因為一個沒有捕獲的異常終止了run方法意外死亡 各狀態(tài)是可以轉換的,借用網絡上一圖說明各狀態(tài)的轉換: 簡單示例: 本例說明了三個狀態(tài):新建后為NEW狀態(tài),start()后為RUNNABLE狀態(tài),線程執(zhí)行結束后為TERMINATED態(tài)。 其完整代碼如下: 本例僅簡單演示這三個狀態(tài),簡單起見,我讓run()方法的方法體為空。 public class ThreadLearn implements Runnable{ public void run() { } public static void main(String args[]) { ThreadLearn target1=new ThreadLearn();//創(chuàng)建類的一個對象 Thread thread=new Thread(target1,"lay");//創(chuàng)建線程類的對象,target1為線程的目標對象,線程名為“奇數(shù)” System.out.println("new 后"+thread.getName()+"線程的狀態(tài)是:"+thread.getState()); thread.start();//啟動線程 System.out.println("start 后"+thread.getName()+"線程的狀態(tài)是:"+thread.getState()); System.out.println("start 后"+thread.getName()+"線程是否活動中:"+thread.isAlive()); System.out.println("start 后"+thread.getName()+"線程的狀態(tài)是:"+thread.getState()) } } 其運行結果如下: |
|
來自: pythonjava學習 > 《待分類》