java.util.concurrent
入門
CountDownLatch
操作のセットが1つ以上のスレッドが待機することを可能にする、他のスレッドで実行されるまでは、同期補助あります
CountDownLatch countDownLatch = new CountDownLatch(int count);
boolean await(long timeout, TimeUnit unit)
あなたはN回の呼び出しまで、スレッドをブロックすることができますcountDownLatch.countDown()
方法はすぐに返すtrue
値、解放スレッドを。現在のスレッドは、スレッドが中断され、指定された待機時間がされていない限り、ゼロになるまで待たなければならないラッチにカウントダウン。void countDown()
呼の数が計算され、複数のスレッドから呼び出すことができるすべてのスレッドのコール数の合計です。カウントがゼロになった場合は、すべての待機中のスレッドを解放します。現在のカウントがゼロより大きい場合、カウントは減少します。
コールcountDown()
カウントがゼロに到達する前に、この方法を、現在のawait()
方法は、ブロックするようにされていると思います。その後、すべての待機中のスレッドを解放する、await()
すべての後続の呼び出しはすぐに戻りますtrue
。
利用シナリオ
- 一部のアプリケーションでは、背後に物事を行うための要件を満たすためにのみ、特定の条件の後に待つ必要があります
- スレッドは、その後の操作のためのトリガ・イベントを完了したとき。
例
public class CountDownLatch {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(10);
Demo ld = new Demo(latch);
// 创建10个线程
for (int i = 0; i < 10; i++) {
new Thread(ld).start();
}
latch.await();
System.out.println("该我了");
}
}
class Demo implements Runnable {
private CountDownLatch latch;
// 有参构造器
public Demo(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
synchronized (this) {
latch.countDown();
}
}
}
}