ホームページ  >  記事  >  Java  >  Javaスレッドの状態遷移の解析と動作例

Javaスレッドの状態遷移の解析と動作例

王林
王林オリジナル
2024-02-18 21:43:07581ブラウズ

Javaスレッドの状態遷移の解析と動作例

Java スレッド ステータスの変更とそれに対応する操作を理解するには、特定のコード例が必要です。

Java マルチスレッド プログラミングでは、スレッド ステータスの変更は非常に重要です。スレッドの状態変化とスレッドの操作方法を理解することは、マルチスレッド プログラミングの中心となる概念をよりよく理解するのに役立ちます。

Java のスレッドの状態は、New (新規)、Ready (実行可能)、Running (実行中)、Blocked (ブロック済み)、Waiting (待機中)、Terminated (終了) の 6 種類に分類できます。以下では、これらの状態を 1 つずつ紹介し、対応するコード例を示します。

  1. 新しい状態 (New):
    新しい状態では、スレッド オブジェクトが作成されていますが、その start() メソッドはまだ呼び出されていません。この状態では、スレッドは CPU リソースを占有しません。
    次は、新しいスレッドを作成するサンプル コードです:
Thread thread = new Thread();
  1. 準備完了状態 (実行可能):
    準備完了状態では、スレッドは start() を呼び出しています。メソッド、待機中 実行のためのリソースの割り当て。スレッドが CPU リソースを取得すると、実行状態になります。
    以下は、スレッドが準備完了状態に入るサンプル コードです:
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();
  1. 実行状態 (Running):
    実行状態では、スレッドはタスクを実行しています。 。スレッドは CPU リソースを積極的に放棄することも、他の優先度の高いスレッドによってプリエンプトされることもできます。
    以下は、スレッドが実行状態に入るサンプル コードです:
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();
  1. ブロック状態 (Blocked):
    ブロック状態では、スレッドは待機しています。リソースの解放。特定の条件が満たされると、スレッドは再び準備完了状態になります。
    以下は、スレッドがブロック状態に入るサンプル コードです:
Object lock = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        lock.notify();
    }
});

thread1.start();
thread2.start();

上記のコードでは、thread1 スレッドは lock.wait() メソッドを呼び出して、ブロック状態に入るまでブロック状態に入ります。 thread2 スレッドが lock.notify () メソッドを呼び出してウェイクアップします。

  1. 待機状態 (Waiting):
    待機状態では、スレッドは特定の条件が満たされるのを待っています。ブロッキング状態とは異なり、待機状態のスレッドでは、他のスレッドが起動する必要があります。
    以下は、スレッドが待機状態に入るサンプル コードです:
Object lock = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (lock) {
        lock.notify();
    }
});

thread1.start();
thread2.start();

上記のコードでは、thread1 スレッドは lock.wait() メソッドを呼び出して、待機状態に入るまで待機状態になります。 thread2 スレッドが lock.notify () メソッドを呼び出してウェイクアップします。

  1. 終了状態 (Terminated):
    終了状態では、スレッドはタスクを完了したか、例外により終了しました。終了状態にあるスレッドは、別の状態に戻ることはできません。
    以下は、スレッドが終了状態に入るサンプル コードです:
Thread thread = new Thread(() -> {
    // 执行一些任务
});

thread.start();

// 等待线程执行完毕
thread.join();

上記のコードでは、thread.join() メソッドを呼び出すことで、メイン スレッドは終了状態になるまで待機します。タスクを完了するには、スレッド thread を実行してください。

要約すると、Java スレッドのステータスの変化とそれに対応する操作を理解することは、マルチスレッド プログラミングにとって重要です。コード例を通じて、各スレッド状態の特性と状態遷移操作の実行方法をより直感的に理解できます。

以上がJavaスレッドの状態遷移の解析と動作例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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