一.简介:

  Latch意思是:门闩的意思,形象的来说await就是拴上门闩,等到门闩释放后当前线程开始工作。

下面是来自简书上的解释:

  CountDownlatch是一个多功能的同步工具,可以被用于各种目的。一个CountDownLatch通过一个值为1的count被初始化,来作为一个开/关的门或门闩:所有调用了await()的线程都会在门前等待,直到门被一个线程通过调用countDown()打开。一个被初始化为N的CountDownLatch可以被用来“在N个线程都完成了某种操作(或者一些操作已经被完成了N次)之后创建一个线程”。

CountDownLatch一个有用的属性就是它不需要线程们在继续执行之前,调用countDown来等待count被减到0。它简单地阻止了任何调用了await()的线程继续,直到所有的线程都能够通过。

二.实例:

两个线程各自执行100次,对i加1,等待两个线程结束输出i值。
import java.util.concurrent.CountDownLatch;/*** Created by cuijunyong on 2018/2/3.*/
public class Xunhuan {public static int i = 0;private static final CountDownLatch end = new CountDownLatch(2);private static final CountDownLatch start = new CountDownLatch(1);public static void main(String[] args) throws Exception{A a = new A();
//    A b = new A();MyThread myThread = new MyThread();Thread b = new Thread(myThread);
//    Thread[] threads = new Thread[10];
//    for(int x = 0; x < threads.length; x++){
//      threads[i] = new Thread(myThread);
//      threads[i].start();
//    }
    a.start();b.start();System.out.println("开始工作了\n");start.countDown();end.await();System.out.println("a:" + a.isAlive());System.out.println("b:" +b.isAlive());System.out.println("i=" + i);}static class MyThread implements Runnable{public void run() {
//      int i = 0;try {start.await();int j = 0;while (j < 100){j++;i++;System.out.println("B = " + i);}System.out.println("end.count = " + end.getCount());end.countDown();} catch (Exception e) {e.printStackTrace();}}}static class A extends Thread{@Overridepublic void run() {
//      int i = 0;try {start.await();int j = 0;while (j < 100){j++;i++;System.out.println("A = " + i);}System.out.println("end.count = " + end.getCount());end.countDown();} catch (Exception e) {e.printStackTrace();}}}}

结果:前面略略略

A = 190
A = 191
A = 192
A = 193
A = 194
A = 195
B = 171
end.count = 2
B = 196
B = 197
B = 198
B = 199
B = 200
end.count = 1
a:false
b:false
i=200

并发编程(CountDownLatch使用)相关推荐

  1. java 并发统计_java并发编程|CountDownLatch计数器

    0x01,CountDownLatch介绍 CountDownLatch是一个计数器,作为java并发编程中三个组件之一,这个组件的使用频率还是很多的.这里分享下自己画的java并发编程组件的图,后面 ...

  2. Java并发编程-CountDownLatch

    2019独角兽企业重金招聘Python工程师标准>>> 1. 应用场景 CountDownLatch是并发包中用来控制一个或者多个线程等待其他线程完成操作的并发工具类.现以工作中的一 ...

  3. Java并发编程--CountDownLatch

    概述 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行. CountDownLatch使用一个计数器count实现,构建CountDownL ...

  4. Java 并发编程CountDownLatch的应用与源码解析

    应用场景 CountDownLatch是一个多线程控制工具.用来控制线程的等待. 设置需要countDown的数量,然后每一个线程执行完毕后调用countDown()方法,而在主线程中调用await( ...

  5. 并发编程——JUC并发编程知识脑图

    摘要 并发编程在软件编程中尤为突出和重要,在当今面试或工作中也是不可缺少的.作为一名高级java开发工程师,并发编程的技能已经成为了重要的一项.本博文将详细介绍并发编程中的知识点和知识脑图,帮助大家更 ...

  6. 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.C ...

  7. Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore

    2019独角兽企业重金招聘Python工程师标准>>> 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarr ...

  8. 【Java 并发编程】CountDownLatch 简介

    文章目录 I CountDownLatch 概念 II CountDownLatch 使用流程 III CountDownLatch API 简介 I CountDownLatch 概念 1. 概念 ...

  9. Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

    2019独角兽企业重金招聘Python工程师标准>>> Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一 ...

  10. Java 并发编程系列之闭锁(CountDownLatch)

    在讲闭锁之前,我们先来思考一个问题:在多线程环境下,主线程打印一句话,如何保证这句话最后(其他线程全部执行完毕)打印? 博主目前可以想到的实现方式有两种.一种是通过 join() 方法实现,另一种就是 ...

最新文章

  1. mysql 内置功能 存储过程介绍
  2. 六.dbms_session(提供了使用PL/SQL实现ALTER SESSION命令)
  3. C# GDI+绘图介绍
  4. linux sudo 配置文件,linux sudo使用和sudoers配置详解
  5. delphi用IdTCPServer和IdTCPClient传输文件
  6. linux debain下vim高亮显示
  7. LSM6DS3 gyro数据设置
  8. AD19-DRC检查
  9. 论文 Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction
  10. 系统集成项目管理工程师05《项目进度管理》
  11. Windows环境下OpenSSL下载安装及制作证书
  12. 基于共现提取人民的民义人物关系
  13. Codeforces Round #655 (Div. 2)
  14. 开源实时消息推送系统 MPush
  15. 如何创建真正适合自己的日程表?
  16. Java修炼之凡界篇 筑基期 第02卷 语法 第01话 注释
  17. Echarts饼图 配置、样式详解 一、图线划分,板块间隙,文字边距样式等
  18. 数据挖掘-Task5:模型融合
  19. FireEye 666漏洞
  20. java关于如何制作商城库存清单程序设计案例的个人笔记

热门文章

  1. ARM汇编:加载和存储指令集(六大类)---LDR(ADR)、LDRB、LDRH、STR、STRB、STRH
  2. 目标代码文件、可执行文件和库
  3. JUC并发编程九 并发架构--循环打印
  4. 统一认证服务CAS 5安装
  5. 《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了...
  6. CodeChef Cards, bags and coins [DP 泛型背包]
  7. Redis中bitmap的妙用
  8. Raspberry 4B 串口通信
  9. ROS系统 创建工作空间与功能包
  10. OpenCV SIFT检测关键点