Java マルチスレッドは Java 言語の重要な機能であり、プログラムで複数のスレッドを同時に実行できるため、プログラムの同時パフォーマンスが向上します。Java マルチスレッドでは、スレッド状態は非常に重要な概念であり、さまざまな時点でのスレッドの状態を表します。この記事では、Java マルチスレッド状態の概念を詳しく紹介し、Java コードを使用してさまざまなスレッド状態を実現する方法を紹介します。
Java マルチスレッド状態
Java のマルチスレッド状態とは、さまざまな時点でのスレッドの状態を指します。Java におけるスレッドの状態は、次の 6 種類に分類できます。
-
NEW: new キーワードを使用してスレッド オブジェクトを作成すると、スレッドは NEW 状態になります。この状態では、スレッドはまだ実行を開始していないか、開始されていません。
-
RUNNABLE: スレッドの start() メソッドが呼び出されると、スレッドは RUNNABLE 状態になります。この状態では、スレッドは Java 仮想マシンによって実行でき、オペレーティング システムのスレッド スケジューラによって実行をスケジュールすることもできます。
-
BLOCKED: スレッドがモニター ロックを待機しているとき、スレッドは BLOCKED 状態になります。この状態では、スレッドはブロックされ、実行できません。
-
WAITING: スレッドが別のスレッドによる特定の操作の実行を待機している場合、スレッドは WAITING 状態に入ります。この状態では、スレッドはブロックされ、実行できません。
-
TIMED_WAITING: スレッドが別のスレッドによる特定の操作の実行を待機し、タイムアウトが設定されている場合、スレッドは TIMED_WAITING 状態に入ります。この状態では、スレッドはブロックされ、タイムアウトまたは他のスレッドからの通知を待機します。
-
TERMINATED: スレッドが実行タスクを完了すると、スレッドは TERMINATED 状態になります。この状態では、スレッドは実行を終了し、実行されなくなります。
スレッド状態のサンプルコード
Java コードを使用してさまざまなスレッド状態を示すサンプル プログラムを次に示します。
public class ThreadStateExample implements Runnable {
public void run() {
try {
// 让线程睡眠 500 毫秒
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread thread = new Thread(new ThreadStateExample());
System.out.println("线程状态:" + thread.getState()); // NEW
thread.start();
System.out.println("线程状态:" + thread.getState()); // RUNNABLE
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程状态:" + thread.getState()); // TIMED_WAITING
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程状态:" + thread.getState()); // TERMINATED
}
}
上記のコードでは、Runnable インターフェイスを実装するクラス ThreadStateExample を作成しました。run() メソッドでは、スレッドを 500 ミリ秒間スリープ状態にします。main() メソッドで、新しいスレッドを作成して開始します。スレッドを開始する前、スレッドは NEW 状態にあります。start() メソッドを呼び出した後、スレッドは RUNNABLE 状態になります。次に、メインスレッドを 100 ミリ秒間スリープさせて、新しいスレッドが TIMED_WAITING 状態になるのを待ちます。最後に、join() メソッドを使用して、新しいスレッドの実行が完了するのを待ち、スレッドの状態を TERMINATED に設定します。
要約する
この記事では、Java マルチスレッド状態の概念と、Java コードを使用してさまざまなスレッド状態を実装する方法を紹介します。Java マルチスレッド状態は Java マルチスレッド プログラミングにおいて非常に重要な概念です。スレッド状態の変化を理解することは、スレッドの実行プロセスをより適切に制御し、プログラムの同時実行パフォーマンスを向上させるのに役立ちます。