文章目录

  • I CountDownLatch 概念
  • II CountDownLatch 使用流程
  • III CountDownLatch API 简介

I CountDownLatch 概念


1. 概念 : CountDownLatch ( 倒计时锁 ) 是 Java 并发编程中重要的 线程同步辅助工具类 , 其与 join 方法功能类似 , 其可以阻塞住一个或多个线程 , 等待在某些线程中执行想用的操作 , 将 CountDownLatch 倒计时计数到 0 时 , 这些被阻塞的线程才能继续向下执行 ;

2. 作用 : CountDownLatch 可以将一个或多个线程阻塞 , 并在另外一个或多个线程中将 CountDownLatch 计数器减为 0 , 被阻塞的线程解除休眠状态 , 继续执行 ;

II CountDownLatch 使用流程


1. 初始化 CountDownLatch : 初始化 new CountDownLatch ( 8 ) , 在构造函数中 , 为其指定一个初始值 , 从这个值开始倒计时计数 ; 这里设置了 8 计数 , 可以等待另外 8 个线程执行完毕后 , 在执行后续操作 ;

2. 阻塞 : 在若干线程 ( 一个或多个 ) 中调用同一个 CountDownLatch 对象的 await() 方法 , 即可将这些线程阻塞 ;

3. 计数减一 : 在其它非阻塞的线程中 , 执行操作 , 之后调用 CountDownLatch 对象的 countDown() 方法 , 该计数器的计数会减一 , 如果计数减到 0 , 在线程中的阻塞就会解除 ;

4. 阻塞结束 : 当调用 countDown 计数减到 0 之后 , 线程阻塞解除 , 继续执行 await() 方法之后的代码 ;

III CountDownLatch API 简介


1. 构造方法 : 初始化 CountDownLatch 对象 , 传入计数器初始计数 count , 其可以表示阻塞 count 个线程 ;

  • ① 函数原型 :
public CountDownLatch(int count)
  • ② 参数 int count : 初始计数 ;

2. 计数器递减方法 : 每次调用该方法 , CountDownLatch 对象计数器就会减一 , 如果计数器计数减到 0 , 就会解除其对于线程的阻塞 ;

  • ① 函数原型 :
public void countDown()
  • ② 当前计数大于 0 : 计数 - 1 , 如果减一后的计数为 0 , 那么该 CountDownLatch 对象阻塞的线程就会从阻塞处开始执行 ;
  • ③ 桑倩计数等于 0 : 如果 CountDownLatch 对象的当前的计数是 0 , 那么不作任何操作 ;

3. 无参阻塞方法 : 在线程 A 中调用该方法后 , 调用该方法的线程 , 线程 A 就会被阻塞住 ( 休眠 ) , 在 CountDownLatch 倒计时为 0 之后该阻塞解除 ;

  • ① 函数原型 :
public void await() throws InterruptedException
  • ② 计数为 0 : 如果当前的 CountDownLatch 计数为 0 , 那么阻塞无效 , 继续执行之后的代码 ;
  • ③ 计数大于 0 : 此时调用 await 方法 的线程阻塞 , 处于休眠状态 ;
  • ④ 线程非运行状态 : 如果调用 await 方法的线程处于中断状态 , 或者在等待时被中断 , 抛出 InterruptedException 异常 ;

4. 带参数的阻塞方法 : 在线程 A 中调用该方法后 , 调用该方法的线程 , 线程 A 就会被阻塞住 ( 休眠 ) , 在 CountDownLatch 倒计时为 0 ( 计数 0 ) 或者超出了等待时间 ( 超时 ) 之后该阻塞解除 ; 该方法运行机制与无参类似 , 这里重点说明超时等待机制 ;

  • ① 函数原型 :
public void await(long timeout, TimeUnit unit) throws InterruptedException
  • ② 参数 long timeout : 阻塞操作要等待的最长时间 ;
  • ③ 参数 TimeUnit unit : 等待时长的单位 , 一般是毫秒 ( ms ) ;

【Java 并发编程】CountDownLatch 简介相关推荐

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

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

  2. Java并发编程实战_[Java并发编程实战] 简介

    并发简史 在早期不包含操作系统的计算机中,程序都是单一的串行程序,从头至尾只能执行一个程序,并且这个程序访问这个计算机的所有资源.然而,随着技术的发展,操作系统出现了.它使得计算机程序有了进程,线程的 ...

  3. [Java并发编程实战] 简介

    并发简史 在早期不包含操作系统的计算机中,程序都是单一的串行程序,从头至尾只能执行一个程序,并且这个程序访问这个计算机的所有资源.然而,随着技术的发展,操作系统出现了.它使得计算机程序有了进程,线程的 ...

  4. Java并发编程-CountDownLatch

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

  5. Java并发编程--CountDownLatch

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

  6. java并发编程笔记_java并发编程笔记(一)——并发编程简介

    java并发编程笔记(一)--简介 线程不安全的类示例 public class CountExample1 { // 请求总数 public static int clientTotal = 500 ...

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

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

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

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

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

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

最新文章

  1. easyexcel怎么设置表头宽度_easyexcel 自动设置列宽
  2. K-近邻算法之案例:鸢尾花种类预测—流程实现
  3. Python脚本:将mol2分子库文件拆分为单个mol2文件
  4. Teradata收购Think Big Analytics 提升大数据咨询能力
  5. Java虚拟机工作原理
  6. Android开发神器:OkHttp框架源码解析
  7. MySQL备份恢复工具xtrabackup
  8. java多线程优先级的方法_Java多线程以及线程优先级
  9. boost::outcome模块containers相关的测试程序
  10. 基于Xml 的IOC 容器的初始化
  11. 覆盖与隐藏的区别 (一个列子)
  12. 微软模拟飞行2020服务器多少内存,《微软模拟飞行2020》:一款游戏大到7000万GB,这才是真正的模拟地球?!...
  13. ArcGIS学习总结(12)——拓扑检查和修正
  14. android手机安装windows系统,安卓手机原来还可以这样安装windows系统,你还不知道吗?...
  15. PC端/电脑端有没有识别二维码并分类的工具
  16. Digispark ATtiny85 单片机点灯大师之圣诞节彩灯Merry Christmas
  17. 综述摘要怎么写?(含7大容易被忽略的注意事项及80%综述文章常见句型汇总)...
  18. 超级短信 handcent sms v4.4.1 android,超级短信(Handcent SMS)
  19. (四)Tensorboard学习——mnist_with_summaries.py
  20. Windows照片查看器无法显示此照片,因为计算机上的可用内存可能不足。

热门文章

  1. 编程学习初体验(4. 编程的核心)
  2. unittest单元测试框架之unittest案例(二)
  3. ACCP8.0Y2Web前端框架与移动应用开发第5章Bootstrap制作微票儿首页
  4. Sql sever 分组排序
  5. Exception异常
  6. 存储过程使用事物的几种方式 转载自--http://www.cnblogs.com/chengxiaoming/archive/2010/06/11/1756163.html...
  7. XP 风格的可拖动列、可排序、可改变宽度的DataGrid的例子
  8. openssl 模块 安装 centso Ubuntu
  9. Java并发编程(十三)同步容器类
  10. Linux 将文件夹下的所有文件复制到另一个文件里