Javaでスレッドの実行ステータスを確認する方法

WBOY
リリース: 2023-05-03 22:31:05
転載
2956 人が閲覧しました

1. スレッドの実行ステータスを確認する

質問

スレッドには次の 6 つの状態があります: 新規、実行中、ブロック済み、待機中、時間指定待機、終了。

新しいスレッドが作成されると、スレッドは新しく作成された状態になります。

start() メソッドが呼び出されるとき、スレッドは実行状態になります。

スレッドがオブジェクトの組み込みロックを取得する必要があり、そのロックが別のスレッドによって所有されている場合、スレッドはブロックされます。

スレッドが、他のスレッドがスケジューラに実行可能であることを通知するのを待っているとき、スレッドは待機状態になります。

Thread クラスの sleep() メソッドなど、時間パラメータを含む一部のメソッドでは、スレッドがタイミング待ち状態になることがあります。

run() メソッドの実行が終了するか、例外が発生すると、スレッドは終了状態になります。

実装: スレッドの実行ステータスを確認します。

2. 問題解決のアイデア

クラス ThreadState を作成し、Runnable インターフェイスを実装します

3 つのメソッドを定義します:

  • waitForASecond (): 現在のスレッドを 0.5 秒待機させるか、他のスレッドが Notice() または NoticeAll() メソッドを呼び出します。

  • waitForyears(): 他のスレッドが呼び出しを行うまで、現在のスレッドを永久に待機させます。通知() または通知All() メソッド

  • #notifyNow(): wait() メソッドを呼び出して待機状態に入ったスレッドを起動します

  • #スレッドの状態を取得するには、Threadクラス()メソッドのgetStateを使用します。

このメソッドの戻り値は Tread.State

3 です。詳細なコードの説明

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート