目次
カウントダウンラッチとは何ですか?
CountDownLatch は Java の同時実行ツール クラスで、複数のスレッドが同時に操作を実行し、特定の条件に達するまで待機し、条件に達した後に同時に操作を実行するように制御するために使用されます。
CountDownLatch のカウンタは正の整数に初期化されます。スレッドがタスクを完了するたびに、カウンタの値は 1 ずつ減ります。カウンタの値が 0 になると、待機中のすべてのスレッドがウェイクアップされ、同時に実行を開始します。時間。
理解するための例
import java.util.concurrent.CountDownLatch;
public class Example {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(2);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
System.out.println("Thread 1 completed.");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
System.out.println("Thread 2 completed.");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
try {
latch.await();
System.out.println("All threads completed.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
この例では、CountDownLatch オブジェクトを作成し、それを 2 に初期化します。次に、2 つのスレッドを作成し、各スレッドでいくつかの操作を実行し、各スレッド内で latch.countDown() メソッドを呼び出してカウンターの値を減らしました。
最後に、メイン スレッドで latch.await() メソッドを呼び出してカウンタの値が 0 になるのを待ち、すべてのスレッドが同時に他の操作を実行できるようにします。
最後に「すべてのスレッドが完了しました。」と出力されます。
これと join の違いについて考えてみませんか?
join の動作原理は次のとおりです。スレッドが生きているかどうかをチェックし続け、生きている場合は、スレッドが終了するまで現在のスレッドを永久に待機させ、スレッドの this.notifyAll が呼び出されます。
明らかに、結合で使用されるシナリオは CountDownLatch よりも明らかに単純です。これは、CountDownLatch の方が強力であることを意味します。
詳細については以下を参照してください。ここでは繰り返しません。
CountDownLatch の理解 1: join_countdownlatch と join_Zhutulang の違い - CSDN ブログ