前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java 并发编程】CountDownLatch 简介

【Java 并发编程】CountDownLatch 简介

作者头像
韩曙亮
发布2023-03-27 17:06:48
3380
发布2023-03-27 17:06:48
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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 个线程 ;

  • ① 函数原型 :
代码语言:javascript
复制
public CountDownLatch(int count)
  • ② 参数 int count : 初始计数 ;

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

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

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

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

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

  • ① 函数原型 :
代码语言:javascript
复制
public void await(long timeout, TimeUnit unit) throws InterruptedException
  • ② 参数 long timeout : 阻塞操作要等待的最长时间 ;
  • ③ 参数 TimeUnit unit : 等待时长的单位 , 一般是毫秒 ( ms ) ;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • I CountDownLatch 概念
      • II CountDownLatch 使用流程
        • III CountDownLatch API 简介
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档