首頁 > 軟體

Java檢視執行緒執行狀態的方法詳解

2022-08-21 14:00:50

一、檢視執行緒的執行狀態

題目

執行緒有以下6種狀態:新建、執行、阻塞、等待、計時等待和終止。

new新執行緒時,執行緒處於新建 狀態。

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

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

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

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

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

實現:檢視執行緒的執行狀態。

二、解題思路

建立一個類:ThreadState,實現Runnable介面

定義3個方法:

  • waitForASecond():使當前執行緒等待0.5秒或其他執行緒呼叫notify()或notifyAll()方法
  • waitForYears() :使當前執行緒永久等待,直到其他執行緒呼叫notify()或notifyAll()方法
  • notifyNow():喚醒由呼叫wait()方法進入等待狀態的執行緒

使用Thread類的getState()方法,可以獲得執行緒的狀態。

該方法的返回值是Tread.State

三、程式碼詳解

package com.xiaoxuzhu;

/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改後版本	        修改人		修改日期			修改內容
 * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
 * </pre>
 * @date 2022/5/10
 */
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() throws InterruptedException {
        notify(); // 喚醒由呼叫wait()方法進入等待狀態的執行緒
        Thread.sleep(100);//留時間列印
    }

    public void run() {
        try {
            waitForASecond(); // 在新執行緒中執行waitForASecond()方法
            waitForYears(); // 在新執行緒中執行waitForYears()方法
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

測試類:

package com.xiaoxuzhu;

/**
 * Description:
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改後版本	        修改人		修改日期			修改內容
 * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
 * </pre>
 * @date 2022/5/10
 */
public class Test {
    public static void main(String[] args) throws InterruptedException {
        ThreadState state = new ThreadState();// 建立State物件
        Thread thread = new Thread(state);// 利用State物件建立Thread物件
        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());// 輸出執行緒狀態
    }

}

到此這篇關於Java檢視執行緒執行狀態的方法詳解的文章就介紹到這了,更多相關Java執行緒執行狀態內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com