秒懂 CountDownLatch 与 CyclicBarrier 使用场景
作者 | pony-zi
来源 | https://blog.csdn.net/zzg1229059735/article/details/61191679
相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch
和CyclicBarrier
,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到底有啥作用,怎么用,应用那些场景?为什么面试总会遇到?本文结合场景为大家加深理解。
官方解释
翻译
CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。
CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。
他们都是:Synchronization aid,我把它翻译成同步辅助器,既然是辅助工具,怎么使用啊?哪些场景使用啊?
个人理解:CountDownLatch
我把他理解成倒计时锁
场景还原
一年级期末考试要开始了,监考老师发下去试卷,然后坐在讲台旁边玩着手机等待着学生答题,有的学生提前交了试卷,并约起打球了,等到最后一个学生交卷了,老师开始整理试卷,贴封条,下班,陪老婆孩子去了。
补充场景
我们在玩LOL英雄联盟时会出现十个人不同加载状态,但是最后一个人由于各种原因始终加载不了100%,于是游戏系统自动等待所有玩家的状态都准备好,才展现游戏画面。
抽象图
每位乘客(线程)上车后,可用座位减1,直到为0,老司机就开始发车了。
个人理解:CyclicBarrier
可看成是个障碍,所有的线程必须到齐后才能一起通过这个障碍
场景还原
以前公司组织户外拓展活动,帮助团队建设,其中最重要一个项目就是全体员工(包括女同事,BOSS)在完成其他项目时,到达一个高达四米的高墙没有任何抓点,要求所有人,一个不能少的越过高墙,才能继续进行其他项目。
抽象图
解放军叔叔完美配合,一个都不能少,继续完成任务。
我这里只是为了促进大家更好的理解它们的应用场景,详细用法可以自行Google。
- END -
往期推荐
“80后的人,真的该退出IT行业了”,某IT公司领导言论惹争议!
Spring Boot 2.5.5发布:开始支持Java 17了!
技术交流群
最近有很多人问,有没有读者交流群,想知道怎么加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群“,即可免费加入我们的高质量技术交流群!
点击阅读原文,送你免费Spring Boot教程!
相关文章
- 布隆过滤器的原理,使用场景和注意事项有哪些_布隆过滤器的基本工作原理
- PageHelper 使用中的一些坑
- SAP UI5 应用中的 sap.ui.require.toUrl 使用场景
- 彻底明白Activity启动模式-SingleTop、SingleTask、SingleInstance具体使用场景[通俗易懂]
- 【说站】mysql蠕虫复制的使用场景
- 分布式锁的使用场景_分布式锁的三种实现的对比
- BigDecimal的使用
- 【腾讯云ES】正确的使用姿势get!日志场景优化案例回顾
- 关于Linux挂载 /etc/fstab 和 systemd.mount 使用场景的一些笔记
- SAP Corbu Theme 在浏览器和 SAPGUI 应用中的使用场景
- 简述消息队列在电商系统使用场景以及工作模式
- 一文详解 WordPress 中使用 Memcached 的常见问题
- Windows Live Writer 简单使用
- Redis数据库的使用场景介绍(避免误用Redis)
- Oracle 视图 DBA_HIST_METRIC_NAME 官方解释,作用,如何使用详细说明
- Linux SVN使用技巧:简单实用的操作指南(linuxsvn操作)
- Linux下atoi函数的使用(linuxatoi)
- 使用SQL Server:编号管理技术(sqlserver编号)
- 无线连接在Linux系统中使用锐捷无线网络连接(linux下锐捷)
- 微软在 GitHub 上发布了一个供内部使用的 Linux 发行版
- 如何使用java实现Open Addressing
- Redis字符集详解:了解Redis支持哪些字符集和对应使用场景(redis字符集)
- 深入剖析Linux LVM实现原理,详解LVM常见使用场景和操作技巧(linuxlvm详解)
- 掌握Oracle表中时间数据的使用技巧(oracle表时间)
- 使用CMD命令行连接MySQL解决乱码问题(cmd连接mysql编码)
- 查看Redis CLI了解如何使用(查看redis cli)
- 学习MySQL如何正确使用单引号(mysql中单引号怎么打)
- 商城用Redis尽展优势提升用户体验(商城使用redis的场景)
- Redis作为面试工具的使用场景(redis面试使用场景)
- 红色可能如何使用含空格的 Redis 键(redis 键有空格)
- Oracle 12中降序排序的使用方法(oracle12降序排序)
- javascript之querySelector和querySelectorAll使用介绍