CountDownLatch可以应用于等待多个线程执行完毕后,再执行剩余逻辑,下面举例说明。

场景:程序启动后有三个初始化启动步骤,都是耗时操作,如果单线程顺序执行的话比较耗时,且各步骤的执行无关联,此时考虑多个线程同时进行初始化,但要保证程序业务逻辑的执行要在3个初始化完成之后,应用CountDownLatch可达到此效果,初始化CountDownLatch时构造函数传入3,每个线程执行完时CountDownLatch执行countDown方法,进行减1操作,这样当3个线程都执行完后,countDownLatch.await();后的代码才得以执行,达到效果(相当于在多线程环境下达到顺序执行的效果)。代码示例如下:

package current;import java.util.concurrent.CountDownLatch;public class CountDownLatchTest {public static void main(String[] args) {CountDownLatch countDownLatch = new CountDownLatch(3);// 线程1:进行程序启动的准备步骤1new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(5000);System.out.println("完成准备步骤1");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}}}).start();// 线程2:进行程序启动的准备步骤2new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(10000);System.out.println("完成准备步骤2");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}}}).start();// 线程3:进行程序启动的准备步骤3new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(5000);System.out.println("完成准备步骤3");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}}}).start();System.out.println("开始程序启动的准备步骤");try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("步骤全部准备完毕,进行业务处理");}}

执行结果为:

开始程序启动的准备步骤
完成准备步骤1
完成准备步骤3
完成准备步骤2
步骤全部准备完毕,进行业务处理

CountDownLatch使用相关推荐

  1. Java并发编程之CountDownLatch、CyclicBarrier和Semaphore

    前言 本文为对CountDownLatch.CyclicBarrier.Semaphore的整理使用 CountDownLatch CountDownLatch类位于java.util.concurr ...

  2. java并发之同步辅助类CyclicBarrier和CountDownLatch

    CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...

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

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

  4. JAVA中的并发工具 -- CountDownLatch、CyclicBarrier、Semaphore

    2019独角兽企业重金招聘Python工程师标准>>> CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. CountDownLatc ...

  5. Java常用多线程辅助工具---countdownLatch

    为什么80%的码农都做不了架构师?>>> 前言 上一篇博文说到semaphore,一个加强版的synchronized,该多线程辅助工具适用于控制对资源操作或者访问的场景.现在有一张 ...

  6. 一文搞懂 CountDownLatch 用法和源码!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! CountDownLatch 是多线程控制的一种工具,它被 ...

  7. CountDownLatch的实现分析

    CountDownLatch CountdownLatch 是 JDK 并发包中提供的并发工具类,其允许一个或多个线程等待其他线程完成操作.常用作将一个任务拆分成多个子任务同时执行,只有子任务都执行完 ...

  8. LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier

    题目地址:Fizz Buzz Multithreaded - LeetCode Write a program that outputs the string representation of nu ...

  9. CycliBarriar和CountdownLatch(计数器)

    CyclicBarrier可以重复使用,而CountdownLatch不能重复使用. countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行. 是通过一个计数器来实现的,计数器的初 ...

  10. Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch

    前言 Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch. Semaphore 意思就是在分布式场景下,只有 3 个凭证,也就意味着同 ...

最新文章

  1. 聚类Clustering
  2. netsh命令修改ip
  3. Win64 驱动内核编程-4.内核里操作字符串
  4. 准备好做个硬核科技青年了么?| 【2019科技创新者大会】限时免费报名中
  5. 向mvc controller传递json数组
  6. python代码实例sicket_Python socket聊天脚本代码实例
  7. 【Python 必会技巧】三元表达式(三目运算符)
  8. c malloc结构体_9.8 C++动态分配 | 存放结构体变量
  9. 生产环境 direct path read 与log file sync等待事件问题处理
  10. python抓取图片_Python3简单爬虫抓取网页图片
  11. PySpark+Windows开发环境的搭建
  12. 最大熵图像复原方法原理(附完整代码)
  13. C#保存图片、压缩图片大小、缩放图片比例
  14. android root查看目录权限,Android真机获取root权限,进入data目录
  15. 上海启用大数据捉拿套牌车 被套牌应立即报案
  16. 一缕烟香起 静中闻鸿蒙,泰山香缘好抽吗?泰山香缘口感评测
  17. 两个鸡蛋,100层楼,找出摔碎鸡蛋的最低楼层,所用的摔鸡蛋次数最少
  18. 请19级的童鞋们接收一下
  19. unc 目录不受支持_经验 |【解决报错】'\\Mac\Home\Desktop' 用作为当前目录的以上路径启动了 CMD.EXE。 UNC 路径不受支持。默认值设为 Windows 目录。...
  20. VB中使用表查询法获取CRC16

热门文章

  1. Springboot 开发 Web Flux
  2. 【Unity2D】GameOver制作人物游戏结束菜单
  3. 微信开发者工具集成git,实现多人协调开发,例如GitHub
  4. huggingface Tokenizers 官网文档学习:tokenizer训练保存与使用
  5. 【开源周荐】分布式配置管理神器Qihoo360/QConf入门指北(部署、配置、使用、架构原理)
  6. Pearson相关系数和Spearman相关系数的区别
  7. 循环赛比赛(分治法)
  8. 闭区间套定理(Nested intervals theorem)讲解1
  9. 大开眼界!“巨齿鲨”现身2018世界机器人大会?
  10. 当我们谈论手机体验时,我们在谈论什么