一、查看執行緒的運作狀態
題目
執行緒有以下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 class="brush:php;toolbar:false">
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/10.1 xiaoxuzhu 2022/5/10 Create
*
登入後複製
* @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 class="brush:php;toolbar:false">
* 修改记录:
* 修改后版本 修改人 修改日期 修改内容
* 2022/5/10.1 xiaoxuzhu 2022/5/10 Create
*
登入後複製
* @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怎麼查看執行緒運行狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!