Java查看線程運行狀態的方法詳解
一、查看線程的運行狀態
題目
線程有以下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線程運行狀態內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java多線程之線程狀態的遷移詳解
- 分析java並發中的wait notify notifyAll
- 一文詳解Java線程的6種狀態與生命周期
- Java線程通信之wait-notify通信方式詳解
- Java中notify()和notifyAll()的使用區別