点击上方“Java基基”,选择“设为星标”
做积极的人,而不是积极废人!
每天 14:00 更新文章,每天掉亿点点头发...
源码精品专栏
来源:blog.csdn.net/zzg1229059735/
article/details/61191679
相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch
和CyclicBarrier
,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到底有啥作用,怎么用,应用那些场景?为什么面试总会遇到?本文结合场景为大家加深理解。
官方解释
![](https://i-blog.csdnimg.cn/blog_migrate/950e7dcf3d5c928f4a9802f6634fdb08.png)
推荐下自己做的 Spring Boot 的实战项目:
https://github.com/YunaiV/ruoyi-vue-pro
翻译
CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。
CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。
他们都是:Synchronization aid,我把它翻译成同步辅助器,既然是辅助工具,怎么使用啊?哪些场景使用啊?
推荐下自己做的 Spring Cloud 的实战项目:
https://github.com/YunaiV/onemall
个人理解:CountDownLatch
我把他理解成倒计时锁
场景还原
一年级期末考试要开始了,监考老师发下去试卷,然后坐在讲台旁边玩着手机等待着学生答题,有的学生提前交了试卷,并约起打球了,等到最后一个学生交卷了,老师开始整理试卷,贴封条,下班,陪老婆孩子去了。
补充场景
我们在玩LOL英雄联盟时会出现十个人不同加载状态,但是最后一个人由于各种原因始终加载不了100%,于是游戏系统自动等待所有玩家的状态都准备好,才展现游戏画面。
抽象图
![](https://i-blog.csdnimg.cn/blog_migrate/39f100b6c38832b5dec51883627802d0.png)
每位乘客(线程)上车后,可用座位减1,直到为0,老司机就开始发车了。
个人理解:CyclicBarrier
可看成是个障碍,所有的线程必须到齐后才能一起通过这个障碍
场景还原
以前公司组织户外拓展活动,帮助团队建设,其中最重要一个项目就是全体员工(包括女同事,BOSS)在完成其他项目时,到达一个高达四米的高墙没有任何抓点,要求所有人,一个不能少的越过高墙,才能继续进行其他项目。
抽象图
![](https://i-blog.csdnimg.cn/blog_migrate/f5e0153166c12a6680b7dfd95d6aaf64.gif)
解放军叔叔完美配合,一个都不能少,继续完成任务。
我这里只是为了促进大家更好的理解它们的应用场景,详细用法可以自行Google。
- END -欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)