java CountDownLatch 使用介绍

Posted lvlv岁月流逝

tags:

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

CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。

举例说明:假如我们有10个excel文档,每个文档中都有一个银行一年的流水记录,我们想要汇总这些文档中所有数据,求出你的均流水记录就可以考虑使用CountDownLatch

伪代码如下:

public class Work implements Runnable  {
    private CountDownLatch latch;
    private String msg;
    private int sum=0;
    public Work(String msg, CountDownLatch latch){
        this.msg=msg;
        this.latch=latch;
    }
    public void run() {
        while (true) {
            System.out.print(msg);
            latch.countDown(); //计数器减1
            break;
        }
    }
}
import java.util.concurrent.CountDownLatch;

/**
 * by lv xiao long 
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        //这里设置计数器的值为2,在子线程中执行两次countDown操作就会变为0。就会回到主线程
        CountDownLatch countDownLatch=new CountDownLatch(2);
        Work work=new Work("线程1工作完成\n",countDownLatch);
        Thread thread=new Thread(work);
        thread.start();
        work=new Work("线程2工作完成\n",countDownLatch);
        thread=new Thread(work);
        thread.start();
        try {
            countDownLatch.await();
            System.out.println( "所有工作已完成!\n" );
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

 

以上是关于java CountDownLatch 使用介绍的主要内容,如果未能解决你的问题,请参考以下文章

java多线程系列:CountDownLatch

Java并发包中CountDownLatch的工作原理使用示例

java多线程对CountDownLatch的使用实例

CountDownLatch的原理学习

同步工具类—CountDownLatch详解

Java多线程-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier