Java知识

CountDownLatch

2020-08-09  本文已影响0人  淡季的风

CountDownLatch

CountDownLatch是一个同步器, 允许一个或多个线程执行完毕,再继续执行, 可以用来协调多个线程的同步。
CountDownLatch通过计数器实现, 计数器的初始值是线程的数量, 每当一个线程执行完毕, 计数器减1, 当计数器减为0或达到超时时间时, 等待的线程开始恢复执行。

应用场景

重要方法

    // 构造器
    public CountDownLatch(int count) {}
    //
    public void await() throws InterruptedException {}
    //
    public boolean await(long timeout, TimeUnit unit) throws InterruptedException{}
    //
    public void countDown() {}

示例

        final CountDownLatch countDownLatch = new CountDownLatch(10);
        for(int i=0; i<10; i++){
            final int finalI = i;
            Runnable thread = new Runnable() {
                @Override
                public void run() {
                    System.out.println(finalI);
                    countDownLatch.countDown();
                }
            };
            thread.run();
        }
        countDownLatch.await();
        ExecutorService service = Executors.newCachedThreadPool();
        final CountDownLatch countDownLatch = new CountDownLatch(1);
        final CountDownLatch countDownLatch1 = new CountDownLatch(10);
        final int[] a = {0};
        for(int i=0; i<10; i++){
            Runnable thread = new Runnable() {
                @Override
                public void run() {
                    try {
                        System.out.println(a[0]);
                        countDownLatch.await();
                        a[0] += 1;
                        countDownLatch1.countDown();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
            service.execute(thread);
        }
        countDownLatch.countDown();
        countDownLatch1.await();
        System.out.println(a[0]);

原理解析

TODO AQS

上一篇 下一篇

猜你喜欢

热点阅读