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() メソッドを終了し、スレッドはライフサイクルを終了します。
次の例は、スレッドのステータスを取得する方法を示しています:
/* 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) にご注意ください。