1.解释

等待其他线程处理完才继续当前线程。比如要要执行B线程,前面有A线程,必须要把A线程执行完,才可以执行B线程。

某一线程在开始运行前等待n个线程执行完毕。将CountDownLatch的计数器初始化为n new CountDownLatch(n) ,每当一个任务线程执行完毕,就将计数器减1 countdownlatch.countDown(),当计数器的值变为0时,在CountDownLatch上 await() 的线程就会被唤醒。一个典型应用场景就是启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行。

2.使用

/**第一步:设置线程A的运行次数为2/
CountDownLatch latch = new CountDownLatch(2); 
/**第二步:递减锁存器的计数,如果计数到达零,则释放所有等待的线程**/
latch.countDown();  
/**第三步:使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断 * 如果当前的计数为零,则此方法立即返回 **/
latch.await();  

CountDownLatch主要两个方法就是一是CountDownLatch.await()阻塞当前线程,二是CountDownLatch.countDown()当前线程把计数器减一

3.例子

public class Test {public static void main(String[] args){final int count = 10; // 计数次数final CountDownLatch latch = new CountDownLatch(count);for (int i = 0; i < count; i++) {new Thread(new Runnable() {@Overridepublic void run() {try {// do anythingSystem.out.println("线程"+ Thread.currentThread().getId());} catch (Throwable e) {// whatever} finally {// 很关键, 无论上面程序是否异常必须执行countDown,否则await无法释放latch.countDown();}}}).start();}try {// 10个线程countDown()都执行之后才会释放当前线程,程序才能继续往后执行latch.await();} catch (InterruptedException e) {// whatever}System.out.println("Finish");}}

Java学习笔记-线程中countDown()使用相关推荐

  1. Java学习笔记----线程

    继续学习----------------------------------------------------------------------- 在Java中线程指的是两件事 1)java.la ...

  2. Java学习笔记——线程

    线程 – 线程的基本概念 程序 :是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程 :是程序的一次执行过程,或是正在运行的一个程序.是一个动态的过程:有它自身的产 ...

  3. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  4. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  5. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  6. Java学习笔记1:Java中有关print、println、printf的用法和区别

    Java学习笔记1:Java中有关print.println.printf的用法和区别 最近在学习java,写一些笔记记录下. 1.print()函数是一般的标准输出,但是不换行. 2.println ...

  7. Java学习笔记5-1——多线程

    目录 前言 核心概念 线程创建 继承Thread类 实现Runnable接口 上述两个方法小结 实现Callable接口 并发问题简介 静态代理模式 线程状态 线程停止(stop) 线程休眠(slee ...

  8. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  9. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

最新文章

  1. springcloud学之前需要掌握什么_学国画之前我们需要准备什么?
  2. postgresql查询栅格数据范围(extent)
  3. TCP/IP原理 (一)
  4. sap 一代增强_在SAP标准实施中不起眼的“小”功能,居然融了3个亿
  5. 玩转Web之servlet(四)---B/S是如何使用http协议完成通信过程的
  6. 前端工程师面试题汇总
  7. python plt调整子图间隔
  8. 【pdf】Head First 设计模式(中文版)
  9. 从行业到技术,10+年资深工程师带你进行嵌入式行业职业规划!
  10. html 四个字与两个字,2014好听的两个字和四个字的qq网名大全精选
  11. PHPMYWIND 教程之 碎片数据的使用GetFragment()
  12. 全局函数声明和静态函数声明
  13. 双目视觉(三)立体匹配算法
  14. 2020年终总结!新的起航,新的征程
  15. 如何将电脑上的音乐传到苹果手机上?电脑音乐导入苹果手机
  16. 虚拟内存,物理内存,页面文件,还有任务管理器
  17. 图文笔记,带你走进《未来简史》(16-20)
  18. ThinkPHP中的getLastSql函数---获取上次执行的SQL语句
  19. 请各位大佬看看关于Scrapy ImagesPipeline对图片进行爬取无法存入本地的问题
  20. JS如何区分微信浏览器、QQ浏览器和QQ内置浏览器,解决 ios 无法判断是否为qq浏览器环境的问题。

热门文章

  1. pycharm关联hadoop开发
  2. 火山PC搭建本地远程服务器1
  3. ubuntu提示“播放此文件需要MPEG-4-AAC解码器,H264解码器“
  4. 2020年8月Java语言程序设计(一)试题及答案
  5. 免费送csdn下载积分
  6. ORAN专题系列-13:微服务架构在5G O-RAN RIC中的应用
  7. 云原生Istio安装和使用
  8. 基于Unity3D经典消消乐游戏源码,代码详细注释,c#版方块消消乐源代码
  9. 2017年美国数学建模MCM/ICM ABCDEF试题分析
  10. 区块链必读“上链”哲学:“胖链下”与“瘦链上”