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