1. 程式人生 > >檢視執行緒的執行狀態

檢視執行緒的執行狀態

執行緒共有6中狀態:新建,執行(可執行),阻塞,等待,計時等待和終止。

當使用new操作符建立新執行緒時,執行緒處於“新建”狀態。

當呼叫start()方法時,執行緒處於執行(可執行)狀態。

當執行緒需要獲得物件的內建鎖,而該鎖正被其他執行緒擁有,執行緒處於阻塞狀態。

當執行緒等待其他執行緒通知排程表可以執行時,該執行緒處於等待狀態。

對於一些含有時間引數的方法,如Thread類的sleep()方法,可以使執行緒處於計時等待狀態。

當run()方法執行完畢或出現異常時,執行緒處於終止狀態。

(1)編寫類ThreadState,該類實現了Runnable介面。在該類中定義了3個方法:waitForASecond()方法用於當前執行緒暫時等待0.5秒,waitForYears()方法用於將當前執行緒永久等待,notifyNow()方法用於通知等待狀態的執行緒執行。在run方法中,運行了waitForASecond()和waitForYears()。
public class ThreadState implements Runnable{

public synchronized void waitForASecond() throws InterruptedException{
    wait(500);        //使當前執行緒等待0.5秒或其他執行緒呼叫notify()或notifyAll()方法
}

public synchronized void waitForYears() throws InterruptedException{
    wait();            //使當前執行緒永久等待,直到其他執行緒呼叫notify()或notifyAll()方法
}
public synchronized void notifyNow(){
    notify();


}
@Override
public void run() {

    try {
            waitForASecond();
            waitForYears();
    } catch (InterruptedException e) {

        e.printStackTrace();
    }

}

}
(2)編寫類Test進行測試,在main()方法中,輸出了執行緒的各種不同的狀態。
public class TestThreadState {
public static void main(String[] args) throws InterruptedException {
ThreadState state = new ThreadState();
Thread thread = new Thread(state);
System.out.println(“新建執行緒:”+thread.getState());//輸出執行緒狀態
thread.start(); //呼叫thread物件的start(),啟動新執行緒
System.out.println(“啟動執行緒:”+thread.getState());//輸出執行緒狀態
Thread.sleep(100); //當前執行緒休眠0.1秒,使新執行緒執行waitForASecond()方法
System.out.println(“計時等待:”+thread.getState());//輸出執行緒狀態
Thread.sleep(1000); //當前執行緒休眠1秒,使新執行緒執行waitForYears()方法
System.out.println(“等待執行緒:”+thread.getState());//輸出執行緒狀態
state.notifyNow(); //呼叫state的notifyNow()方法
System.out.println(“喚醒執行緒:”+thread.getState());//輸出執行緒狀態
Thread.sleep(1000); //當前執行緒休眠1秒,使新執行緒結束
System.out.println(“終止執行緒:”+thread.getState());//輸出執行緒狀態
}
}