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

    }
}
时间: 2024-08-10 23:29:48

java CountDownLatch 使用介绍的相关文章

java.util.concurrent介绍

(本文由 blog博主Caoer(草儿)原创,此处为转载. ) java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作.通过提供一组可靠的.高性能并发构建块,开发人员可以提高并发类的线程安全.可伸缩性.性能.可读性和可靠性. 如果一些类名看起来相似,可能是因为 java.util.concurrent 中的许多概念源自 Doug L

java.util.concurrent介绍【转】

java.util.concurrent介绍 java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作.通过提供一组可靠的.高性能并发构建块,开发人员可以提高并发类的线程安全.可伸缩性.性能.可读性和可靠性. 如果一些类名看起来相似,可能是因为 java.util.concurrent 中的许多概念源自 Doug Lea 的 util

Java垃圾回收介绍(译)

在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的.与C语言不同的是,在Java中开发者不需要专门为垃圾回收写代码.这是使Java流行的众多特征之一,也帮助了程序员写出了更好的Java应用. 这是一个四部分的系列教程,以了解在Java中垃圾回收的基础, Java垃圾回收介绍 Java垃圾回收如何工作? Java垃圾回收器的类型 监控和分析Java垃圾回收 这篇教程是系列中的第一部分.本篇中会解释一些基本术语,像JDK,JVM,JRE,HotSpot VM,然后去理解JVM

JAVA SSH 框架介绍

SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注.Struts把Servlet.JSP.自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套M

java 的简单介绍

一.Java 特点     1.简单: 和C++相比较     2.面向对象     3.跨平台    由于它是先编译后解释 + JVM(屏蔽底层操作系统的差异) 二.程序的运行一般有两种:     1.编译  源文件 ------> 编译器  机器码文件       快  无法跨平台     2.解释  源文件 ------> 解释器  逐行翻译并运行   慢  可以跨平台 三.Java运行机制: 先编译,后解释     .java 源文件  -------> 编译器 .class 字

java面向对象的介绍

面向对象 编程思想 从需求出发 从现实世界出发 对象:一切客观存在的事物 什么都是对象 是什么 is a 继承 属性:有什么 has a 关联(聚合) 方法:能做什么 use a 依赖 面向对象思想:先找到解决问题所需的对象,再通过对象间的联系(3种关系)完成需求 计算机中的对象: 数据(连续的存储空间) 代表了生活中的对象 模拟了现实世界中的对象关系 面向对象的优势: 1.各司其职 封装 2.弱耦合性 多态 接口 3.可重用性 封装 4.可扩展性 继承 类: 对象共性的抽象,是人对对象的认识

Java Web开发介绍

转自:http://www.cnblogs.com/pythontesting/p/4963021.html Java Web开发介绍 简介 Java很好地支持web开发,在桌面上Eclipse RCP谈不上成功,JAVA是主要用在服务器端,和Python一样是极其重要的Web后台开发语言. Java Web应用通常不直接在服务器上运行,而是在Web容器内.容器提供的运行时环境,提供JVM (Java Virtual Machine)运行本地Java应用.容器本身也运行在JVM. 通常Java的

Java线程池介绍

Java线程池介绍 2015-10-24 ImportNew (点击上方公号,可快速关注) 原文:allegro 译文:ImportNew - paddx 链接:http://www.importnew.com/16845.html 根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年就会翻一倍.但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长.处理器制造商花了很多年来提高时钟频率和指令并行.在新一代的处理器上,单线程程序的执行速率确实有所提高.但是,时钟频率

Java远程技术介绍学习

Java远程技术介绍学习 RMI [既Remote Method Invoke 远程方法调用] 实现方式为,类extend了java.rmi.Remote接口,即成为存在于服务器端的远程对象,提供客户端访问. PS: extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用. 同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远