ホームページ >Java >&#&チュートリアル >Java の例 - スレッドステータスの取得

Java の例 - スレッドステータスの取得

黄舟
黄舟オリジナル
2017-01-20 11:22:581944ブラウズ

Java のスレッドのライフサイクルは、大きく 5 つの状態に分けることができます。

1. 新しい状態 (New): 新しいスレッド オブジェクトが作成されます。

2. 準備完了状態 (実行可能): スレッド オブジェクトが作成された後、他のスレッドはオブジェクトの start() メソッドを呼び出します。この状態のスレッドは、実行可能なスレッド プールに配置され、実行可能になり、CPU の使用権を取得するのを待っています。

3. 実行状態 (Running): 準備完了状態のスレッドが CPU を取得し、プログラム コードを実行します。

4. ブロック済み: ブロックされた状態は、スレッドが何らかの理由で CPU を使用する権利を放棄し、一時的に実行を停止することを意味します。スレッドが準備完了状態になるまで、実行状態に移行する可能性があります。ブロックされる状況は 3 つあります:

(1) ブロック待ち: 実行中のスレッドは wait() メソッドを実行し、JVM はスレッドを待機プールに入れます。

(2) 同期ブロック: 実行中のスレッドがオブジェクトの同期ロックを取得するときに、同期ロックが別のスレッドによって占有されている場合、JVM はスレッドをロック プールに入れます。

(3) その他のブロック: 実行中のスレッドが sleep() または join() メソッドを実行するか、I/O リクエストを発行すると、JVM はスレッドをブロック状態にします。 sleep() 状態がタイムアウトになるか、join() がスレッドの終了を待つかタイムアウトになるか、I/O 処理が完了すると、スレッドは準備完了状態に戻ります。

5. 死亡状態 (Dead): スレッドは実行を終了するか、例外により run() メソッドを終了し、スレッドはライフサイクルを終了します。

Java の例 - スレッドステータスの取得

次の例は、スレッドのステータスを取得する方法を示しています:

/*
 author by w3cschool.cc
 Main.java
 */class MyThread extends Thread{
   boolean waiting= true;
   boolean ready= false;
   MyThread() {
   }
   public void run() {
      String thrdName = Thread.currentThread().getName();
      System.out.println(thrdName + " 启动");
      while(waiting)
      System.out.println("等待:"+waiting);
      System.out.println("等待...");
      startWait();
      try {
         Thread.sleep(1000);
      }
      catch(Exception exc) {
         System.out.println(thrdName + " 中断。");
      }
      System.out.println(thrdName + " 结束。");
   }
   synchronized void startWait() {
      try {
         while(!ready) wait();
      }
      catch(InterruptedException exc) {
         System.out.println("wait() 中断。");
      }
   }
   synchronized void notice() {
      ready = true;
      notify();
   }}public class Main {
   public static void main(String args[]) 
   throws Exception{
      MyThread thrd = new MyThread();
      thrd.setName("MyThread #1");
      showThreadStatus(thrd);
      thrd.start();
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.waiting = false;
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.notice();
      Thread.sleep(50);
      showThreadStatus(thrd);
      while(thrd.isAlive())
      System.out.println("alive");
      showThreadStatus(thrd);
   }
   static void showThreadStatus(Thread thrd) {
      System.out.println(thrd.getName()+" 存活:" +thrd.isAlive()+" 状态:" + thrd.getState() );
   }}

上記のコードを実行した出力結果は次のとおりです:

……alive
alive
aliveMyThread #1 结束。alive
alive
alive
alive
alive
alive
aliveMyThread #1 存活:false 状态:TERMINATED

上記は Java の例です - スレッドのステータスの取得 詳細については、関連コンテンツについては、PHP 中国語 Web サイト (www .php.cn) にご注意ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。