ホームページ  >  記事  >  Java  >  Java 並行プログラミングでバリアを使用してスレッド同期を実現するにはどうすればよいですか?

Java 並行プログラミングでバリアを使用してスレッド同期を実現するにはどうすればよいですか?

王林
王林オリジナル
2024-05-04 16:06:02982ブラウズ

バリアは、実行を続行する前に、すべてのスレッドが指定されたポイントに到達するまでスレッドのグループを待機させるために使用される同期ツールです。バリアは java.util.concurrent.CyclicBarrier を使用して作成でき、各スレッドは await() メソッドを呼び出してバリアに参加し、他のスレッドを待機します。すべてのスレッドがバリアに到達すると、実行を継続します。バリアを使用すると、すべてのスレッドが計算を完了するまで後続の操作が実行されないようにすることができます。

Java 並行プログラミングでバリアを使用してスレッド同期を実現するにはどうすればよいですか?

バリアを使用した Java 並行プログラミングでのスレッド同期の実現

バリアは、並行プログラミングにおける同期ツールです。グループ スレッドは、すべてのスレッドが特定のポイントに到達するまで待機してから、実行を続行します。これは、すべてのスレッドが初期化を完了した後に後続の操作を実行するなど、特定のシナリオで役立ちます。

バリアの作成

java.util.concurrent.CyclicBarrier クラスを使用してバリアを作成できます。このクラスのコンストラクターは、バリア内のスレッドの数を表す整数パラメーターを受け取ります。

CyclicBarrier barrier = new CyclicBarrier(4);

バリアの使用

バリアを使用するには、各スレッドが await() メソッドを呼び出す必要があります。このメソッドは、バリア内のすべてのスレッドが await() メソッドを呼び出すまで、スレッドをブロックします。すべてのスレッドがバリアに到達すると、実行を継続します。

for (int i = 0; i < 4; i++) {
    new Thread(() -> {
        try {
            barrier.await();
        } catch (InterruptedException | BrokenBarrierException e) {
            e.printStackTrace();
        }
    }).start();
}

実際的なケース

すべてのスレッドが計算を完了した場合にのみ要約できるレポートを生成する必要があるスレッドのグループがあるとします。バリアを使用して、すべてのスレッドが計算を完了するまで集計が開始されないようにすることができます。

cyclicBarrier.await();
// 汇总结果并生成报告

注意事項

  • バリアはプログラムの速度を低下させる可能性がある同期ツールであるため、使用する場合は慎重に検討する必要があります。
  • バリアは割り込みをサポートしていないため、スレッドがバリア内でブロックされている場合、他のスレッドはそのスレッドに割り込むことができません。
  • バリアはタイムアウトをサポートしており、指定された時間内にスレッドがバリアに到達しない場合、バリアは BrokenBarrierException 例外をスローし、他のすべてのスレッドは実行を継続します。

以上がJava 並行プログラミングでバリアを使用してスレッド同期を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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