秒懂 CountDownLatch 与 CyclicBarrier 使用场景

本文通过实例场景解析Java并发工具类CountDownLatch和CyclicBarrier的作用和使用方法。CountDownLatch用于倒计时锁,例如在所有线程完成任务前阻止主线程继续执行;CyclicBarrier则是一个障碍,所有线程必须等待彼此到达同一位置才能继续。场景举例包括考试等待所有学生交卷和团队拓展活动中集体翻越高墙。理解这两个工具能帮助开发者更好地进行多线程同步控制。
摘要由CSDN通过智能技术生成

9f8046b17f730b287e176a0a928e03d2.png

作者 | pony-zi

来源 | https://blog.csdn.net/zzg1229059735/article/details/61191679

相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatchCyclicBarrier,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到底有啥作用,怎么用,应用那些场景?为什么面试总会遇到?本文结合场景为大家加深理解。

官方解释

b3797c65c3b1b3f22abd644b57cf9ecb.png

翻译

CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。

CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。

他们都是:Synchronization aid,我把它翻译成同步辅助器,既然是辅助工具,怎么使用啊?哪些场景使用啊?

个人理解:CountDownLatch

我把他理解成倒计时锁

场景还原

一年级期末考试要开始了,监考老师发下去试卷,然后坐在讲台旁边玩着手机等待着学生答题,有的学生提前交了试卷,并约起打球了,等到最后一个学生交卷了,老师开始整理试卷,贴封条,下班,陪老婆孩子去了。

补充场景

我们在玩LOL英雄联盟时会出现十个人不同加载状态,但是最后一个人由于各种原因始终加载不了100%,于是游戏系统自动等待所有玩家的状态都准备好,才展现游戏画面。

抽象图

3e2b8a35c6df8696bef36639af4c242e.png

每位乘客(线程)上车后,可用座位减1,直到为0,老司机就开始发车了。

个人理解:CyclicBarrier

可看成是个障碍,所有的线程必须到齐后才能一起通过这个障碍

场景还原

以前公司组织户外拓展活动,帮助团队建设,其中最重要一个项目就是全体员工(包括女同事,BOSS)在完成其他项目时,到达一个高达四米的高墙没有任何抓点,要求所有人,一个不能少的越过高墙,才能继续进行其他项目。

抽象图

8e56ef6ba466c2c0dc1ea87b293e0ba9.gif

解放军叔叔完美配合,一个都不能少,继续完成任务。

我这里只是为了促进大家更好的理解它们的应用场景,详细用法可以自行Google。

- END -

往期推荐

“80后的人,真的该退出IT行业了”,某IT公司领导言论惹争议!

突发!LayUI宣布下线

四种主流的 API 架构风格对比

Spring Boot 2.5.5发布:开始支持Java 17了!

任务数量超过线程池负荷了怎么办?拒绝策略安排起来!

9df670c64e37158f18d56a5ba627722b.png技术交流群50ce1a2734988978462f533143dfe329.png

最近有很多人问,有没有读者交流群,想知道怎么加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群“,即可免费加入我们的高质量技术交流群!

点击阅读原文,送你免费Spring Boot教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值