JUCたCountDownLatch

java.util.concurrent

入門

CountDownLatch操作のセットが1つ以上のスレッドが待機することを可能にする、他のスレッドで実行されるまでは、同期補助あります

  1. CountDownLatch countDownLatch = new CountDownLatch(int count);
  2. boolean await(long timeout, TimeUnit unit)あなたはN回の呼び出しまで、スレッドをブロックすることができますcountDownLatch.countDown()方法はすぐに返すtrue値、解放スレッドを。現在のスレッドは、スレッドが中断され、指定された待機時間がされていない限り、ゼロになるまで待たなければならないラッチにカウントダウン。
  3. void countDown()呼の数が計算され、複数のスレッドから呼び出すことができるすべてのスレッドのコール数の合計です。カウントがゼロになった場合は、すべての待機中のスレッドを解放します。現在のカウントがゼロより大きい場合、カウントは減少します。

コールcountDown()カウントがゼロに到達する前に、この方法を、現在のawait()方法は、ブロックするようにされていると思います。その後、すべての待機中のスレッドを解放する、await()すべての後続の呼び出しはすぐに戻りますtrue

利用シナリオ

  1. 一部のアプリケーションでは、背後に物事を行うための要件を満たすためにのみ、特定の条件の後に待つ必要があります
  2. スレッドは、その後の操作のためのトリガ・イベントを完了したとき。

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();
        }
    }
}
}

おすすめ

転載: www.cnblogs.com/loveer/p/11409961.html