首頁  >  文章  >  Java  >  Java怎麼查看執行緒運行狀態

Java怎麼查看執行緒運行狀態

WBOY
WBOY轉載
2023-05-03 22:31:052906瀏覽

一、查看執行緒的運作狀態

題目

執行緒有以下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怎麼查看執行緒運行狀態

以上是Java怎麼查看執行緒運行狀態的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除