面试官:CountDownLatch 与 CyclicBarrier 的使用场景?有什么区别?

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

点击上方“果汁简历”,选择“置顶公众号”

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

本文结合场景为大家加深理解。

官方解释:

de10331982442663a81a2481f2928245.png
图片

翻译:

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

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

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

个人理解:CountDownLatch:我把他理解成倒计时锁

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

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

抽象图:

b1d489e7a46d1d9d60c3c51fc3950325.png
图片

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

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

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

抽象图:

03affba9ce218d9419aa8e6703e81cbe.gif
图片

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

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

原文链接:https://urlify.cn/2EZRVn

往期精彩回顾

让人又爱又恨的 Lombok,到底该不该用

Delombok 是个啥?居然可破 Lombok?

跳槽的必要条件是有一份好的简历

时候为自己的后半生考虑了——致奔三的互联网人

8dedc809a23b4c88c6e619b136243cfe.png

c8270835a6cc2cb58afa545121d4a47b.png

点个赞呗

这俩工具太像了!到底啥时候用 CountDownLatch,啥时候用 CyclicBarrier 我事后也问了那个面试官,他说:“小米,其实你们日常用的少,但这种题就是看你理解同步机制、场景选择能力。项目中用不对,比不会更严重。听完我心里一紧——确实啊!好在这次补了个扎实,未来再遇到多线程场景,也能更合理选型啦!写到这,突然有点感慨。31岁,依然能在面试上学到新东西,说明技术这碗饭,真是吃一辈子学一辈子啊!多线程是Java工程师的必备技能,不管是不是“用得少”,理解同步机制、选型得当,才是成熟开发者该有的样子。如果这篇文章对你有帮助,点个【在看】或者【转发】支持一下小米叭! 阅读详情

相关推荐

中国高质量夜间灯光数据

中国高质量夜间灯光数据是CnOpenData吉林高分遥感应用研究院有限公司合作的数据库 ,基于多源夜间灯光卫星遥感影像,经过科学手段对数据进行降噪、修正、分析统计,以年度、月度为更新频率,以省市县三级行政区划作为统计单元,制作高质量夜间灯光数据。

Sunny9qx的博客 3253

阿里 java 面试题 p6_五面阿里P6:Java开发面试题及答案

一面(电话)说说对JVM的理解treemaphashmap有什么区别Java多线程的的5大状态图流转mysql主键唯一索引的区别说说最近的项目如何实现session共享,用redis如何实现缓存击穿的概念解决方案说说微服务,微服务之间如何管理二面(现场)java nio常?用的三个类java里面的同步锁了解吗?CountdownlauchCylicbarrior区别,分别在什么应用场景...

weixin_29156401的博客 544

学习笔记【Day 20】鸿蒙PC应用在SD WAN MSTP场景用CodeArts test工具测试过程

多生成树协议(MSTP)作为二层网络高可靠、无环路的核心技术,其在鸿蒙 PC 上的兼容性稳定性测试尤为重要。本文结合华为云 CodeArts TestPlan 全流程测试管理平台,详细拆解鸿蒙 PC 端 MSTP 功能的测试设计、环境搭建、执行验证。1.测试左移,保障迭代效率CodeArts TestPlan 将 MSTP 测试从后期集成阶段 “左移” 至开发早期,通过可复用用例库自动化脚本,支持每次代码提交后的快速回归测试,避免网络功能稳定性因迭代被破坏。2.平台化工具破解复杂场景测试难题。

aiyijianghe的博客 1036

小谈 MySQL 第三话·主从同步延迟

目录 一、MySQL 从库同步的相关参数 二、MySQL 从库同步延时出现的情况 三、MySQL 主从同步延迟的缘由 1、MySQL 主从同步原理 2、MySQL 主从同步延迟是怎么产生的 四、MySQL 主从同步延迟解决方案 1、架构方面 2、硬件方面 3、MySQL 参数调整 4、文件系统本身属性的优化(略) 5、号称永久解决复制延迟问题的并行复制 一、MySQL 从库同步的相关参数 1、Master_Log_File slave 中的 I/O 线程当前正在读取的主服务器二进

SHOWufei 454

CountdownLatchCyclicBarrier区别使用场景具体实现

CountdownLatchCyclicBarrier都属于线程同步的工具,不过具体的实现以及使用的情况有所不同,我们先来看看不同的使用情况 CountdownLatch 使用场景 顾名思义CountdownLatch可以当做一个计数器来使用,比如某线程需要等待其他几个线程都执行过某个时间节点后才能继续执行 我们来模拟一个场景,某公司一共有十个人,门卫要等十个人都来上班以后,才可以休息,代码实现如下 public static void main(String[] args) { fi

weixin_39917924的博客 425

CycliBarriarCountdownLatch有什么区别

阅读文本大概需要3分钟。       在Java中CycliBarriarCountdownLatch有什么区别CyclicBarrier可以重复使用,而CountdownLatch不能重复使用。        Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个...

i_am_beautiful_Girl的博客 616

CountDownLatchCyclicBarrier区别

差一点点就挂了,还好我不要脸

3y 1830

面试官CountDownLatch CyclicBarrier使用场景?有什么区别?(1)

给大家送一个小福利附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取5ff00ff254613a03fab5e56a57acb)收录**需要这份系统化的资料的朋友,可以点击这里获取。

2401_84689238的博客 803

大厂Java面试现场:严肃面试官搞笑程序员六六的巅峰对决

:啊,这两个都是用来控制线程等待的对吧。:一般看CPU核数,比如4核的话,corePoolSize设为4或者8,任务类型如果是IO密集型就多一点,计算密集型就少一点?(强装镇定):您好,我叫六六,是个水货程序员,但我的大脑内存够大,随时准备扩容知识库。(面无表情):你好,我是今天的面试官,接下来我会问一些Java相关的技术问题。(自信满满):当然是StringBuilder,因为效率更高,不需要同步开销?:好了,今天的问题就到这里。

cIearl0ve11的博客 350

《互联网大厂 Java 求职者面试:从核心知识到中间件》

通过调用 countDown 方法来减少计数器的值,当计数器的值减为 0 时,等待的线程会被唤醒。:基本数据类型是直接存储在栈中的,而引用数据类型存储的是对象的引用,在栈中存储的是对象的地址。:Java 的核心知识包括面向对象编程的三大特性:封装、继承、多态,还有基本数据类型、引用数据类型等。:封装可以隐藏对象的内部实现细节,只对外提供必要的接口,这样可以提高代码的安全性可维护性。在互联网大厂的面试室里,面试官严肃地看着面前的求职者,开始了面试的第一轮提问。:很好,那你说说垃圾回收机制是怎么工作的?

hjc_1732的博客 397

java多线程面试题_15个Java线程并发面试答案

面试Java开发者时常问的15个Java多线程并发问题1. 现在有线程 T1、T2 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?这个线程面试题通常在第一轮面试或电话面试时被问到,这道多线程问题为了测试面试者是否熟悉 join 方法的概念。答案也非常简单——可以用 Thread 类的 join 方法实现这一效果。2. Java 中新的 Lock 接口相对...

weixin_39584549的博客 309

面试官CyclicBarrier CountDownLatch区别是什么?

已重置),但这次没有额外动作。(打印消息),然后一起开始。都是 Java 并发包。

牛马baby的博客 1778

面试官追问:CyclicBarrier CountDownLatch 有啥区别

如果下一次你也面对 “CyclicBarrier CountDownLatch 有啥区别”这神仙提问,绝对别只说“都是线程同步工具”那种教科书八股。讲一下谁等谁、谁能反复用、啥时候出发,甭管技术面还是“故事面”,肯定能留个好印象。至于我?终于从 barrier 坑爬出来,开始觉得并发面试算啥,人生不过就是过关斩将、错个 barrier,大不了 reset 下自己继续冲呗!– 程序员也得收个尾巴,写完这篇,泡杯咖啡继续下一个线程!

2501_92441786的博客 384

面试官:今天来聊聊并发线程工具类CountDownLatchCyclicBarrier场景使用问题吧

面试官:今天来聊聊并发相关的场景问题吧? 候选者:嗯?你说 面试官:现在我有50个任务,这50个任务在完成之后,才能执行下一个「函数」,要是你,你怎么设计? 候选者:嗯,我想想哈。 候选者:可以用JDK给我们提供的线程工具类,CountDownLatchCyclicBarrier都可以完成这个需求。 候选者:这两个类都可以等到线程完成之后,才去执行某些操作 面试官:那既然都能实现的话?那CountDownLatchCyclicBarrier有什么什么区别呢? 候选者:主要的区别就是C

分享Java技术知识,共同成长进步! 249

面试官:说说CountDownLatchCyclicBarrier,Semaphore的原理?

CountDownLatch CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景。 举个例子,早上部门开会,有人在上厕所,这时候需要等待所有人从厕所回来之后才能开始会议。 public class CountDownLatchTest { private static int num = 3; private static CountDownLatch countDownLatch = new CountDownLatch(num); p

艾小仙的专栏 534

面试1v1》CountDownLatchCyclicBarrier

Markdown面试官候选人:当然可以。CountDownLatch CyclicBarrier 都是 Java 中用于多线程编程的工具类。它们都可以用于协调多个线程的执行顺序,但是它们的实现方式使用场景有所不同。面试官候选人:当然可以。CountDownLatch 是一个计数器,它可以让一个或多个线程等待其他线程完成某些操作后再执行。它的实现方式是通过一个计数器来实现的,当计数器的值为 0 时,等待线程就会被唤醒。

JavaPub 848
上一篇: 中国互联网企业员工平均年龄出炉:字节跳动、拼多多最年轻仅 27 岁
下一篇: 面试官:Java 反射机制的应用场景?
weixin_37097680
博客等级 码龄10年 22粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值