⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/zzg1229059735/article/details/61191679 「pony-zi」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

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

官方解释

图片

翻译

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

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

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

个人理解:CountDownLatch

我把他理解成倒计时锁

场景还原

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

补充场景

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

抽象图

图片

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

个人理解:CyclicBarrier

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

场景还原

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

抽象图

图片

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

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

文章目录
  1. 1. 官方解释
  2. 2. 翻译
  3. 3. 个人理解:CountDownLatch
    1. 3.1. 场景还原
    2. 3.2. 补充场景
    3. 3.3. 抽象图
  4. 4. 个人理解:CyclicBarrier
    1. 4.1. 场景还原
    2. 4.2. 抽象图