JUC--闭锁 CountDownLatch

Posted zhy-study

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC--闭锁 CountDownLatch相关的知识,希望对你有一定的参考价值。

CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,允许一个或者多个线程一直等待。

闭锁可以延迟线程的进度直到其到达终止状态,可以确保某些活动知道其他活动都完成才继续执行

 

 

注意:在run方法中必须将调用countdown方法 计数减1 并且在new CountDownLatch时创建的个数要和for循环中的线程个数相等,并且调用latch.await()方法进行等到所有的thread执行完毕。

 

应用场景:

  例如 超市中多个线程计算每个种类的商品的信息 ,使用countdownlatch等到各个种类的信息计算完之后,统计总信息。

 

/**
 * countdownlatch 闭锁 在完成某些运算时,只有其他所有thread得运算全部完成 当前运算才能继续执行
 */
public class TestCountDownLatch {
    public static void main(String[] args) {
        final CountDownLatch latch = new CountDownLatch(5);
        CDLDemo ld= new CDLDemo(latch);
        long start =System.currentTimeMillis();
        for(int i=0;i<5;i++){
            new Thread(ld).start();
        }
        try{
            latch.await();
        }catch (InterruptedException e){
        }
        long end = System.currentTimeMillis();
        System.out.println("use time:================"+(end-start));
    }
}

class CDLDemo implements Runnable {
    private CountDownLatch latch;
     CDLDemo(CountDownLatch latch) {
        this.latch = latch;
    }




    @Override
    public void run() {
        synchronized (this){
            try{
                for(int i=0;i<500;i++){
                    if(i%2==0)
                        System.out.println(i);
                }
            }finally {

                latch.countDown();
            }

        }



    }
}

以上是关于JUC--闭锁 CountDownLatch的主要内容,如果未能解决你的问题,请参考以下文章

JUC--闭锁 CountDownLatch

juc线程高级特性——CountDownLatch / Callable / Lock

006-多线程-JUC线程池-并发测试程序

juc学习六(CountDownLatchCyclicBarrier和Semaphore)

JUC——线程同步辅助工具类(Semaphore,CountDownLatch,CyclicBarrier)

Java基础学习总结(193)—— JUC 常用并发工具类总结