非常有用的并发控制-循环栅栏CyclicBarrier

简介: 昨天我讲了倒计时器CountDownLatch的应用,它是阻塞线程直到计时器归0的一种等待方式。今天讲的这个循环栅栏CyclicBarrier与倒计时器非常类似,但它比倒时器更加强大且稍微复杂,它也是并发控制中非常实用的工具。

昨天我讲了倒计时器CountDownLatch的应用,它是阻塞线程直到计时器归0的一种等待方式。今天讲的这个循环栅栏CyclicBarrier与倒计时器非常类似,但它比倒时器更加强大且稍微复杂,它也是并发控制中非常实用的工具。

循环栅栏CyclicBarrier,从英语字义可以理解为它是可以循环利用的,且栅栏是用来阻止线程在栅栏外等待的,它同样是阻止线程等待,它和CountDownLatch倒底有什么区别呢?

给你出道题,5个线程同时执行,当每个线程都执行了某段代码后再继续往下执行,如果5个线程未到齐,否则其他线程一直等待。

从上面的题目,我们来看下面的例子,理解什么是循环栅栏。

首先CyclicBarrier构造方法接受5个线程数和线程聚齐时的回调线程。什么意思呢?就是当5个线程都调用了await()方法,这5个线程才继续往下执行,执行前先运行到齐时的回调线程。

从例子输出的结果可以看出cb finish先运行的,说明到齐运行了回调线程,再输出了每个线程的耗时,我们控制10个线程来阻塞等待,而循环栅栏只有5个,说明它是可以循环利用的,每到齐5个线程阻塞的线程就继续执行。

需要注意的await方法会抛出异常,一个是中断异常InterruptedException,即是其他线程中断了这个线程,另外一个是BrokenBarrierException,如果1个线程被打断出现InterruptedException,其他等待在循环栅栏外面的线程就会出现BrokenBarrierException。因为一个线程被打断了,即打破了循环栅栏的完整性,导致线程不能到齐其他线程永远不能继续执行,这个异常也就避免了线程永远等待的情况。

希望对你有用,有什么问题也欢迎到下面留言,文章所示代码请加下面的QQ群文件下载。

相关文章
|
机器学习/深度学习 人工智能 运维
什么是AIOps智能运维?
AIOps(智能运维)是一种利用人工智能和机器学习技术的软件,用于实时分析和处理业务和运营数据,以提供规范性和预测性答案。它通过收集和汇总大量数据,并使用智能筛选和识别重要事件和模式,帮助团队快速解决问题并避免事件发生。AIOps不依赖于人为指定规则,而是通过机器学习算法自动学习和提炼规则。它可以分析异常告警、故障分析、趋势预测等,并在某些情况下自动解决问题。AIOps的团队包括SRE团队、开发工程师团队和算法工程师团队,他们在AIOps相关工作中扮演不同的角色。
|
4月前
|
机器学习/深度学习 人工智能 缓存
让AI评测AI:构建智能客服的自动化运营Agent体系
大模型推动客服智能化演进,从规则引擎到RAG,再到AI原生智能体。通过构建“评估-诊断-优化”闭环的运营Agent,实现对话效果自动化评测与持续优化,显著提升服务质量和效率。
2172 86
让AI评测AI:构建智能客服的自动化运营Agent体系
|
3月前
|
人工智能 自然语言处理 小程序
2025 电商智能客服系统推荐:高转化、低成本的客服解决方案
电商智能客服已成营收助力,2025年渗透率超72%。专业系统可提升转化率18%、降本35%。本文基于最新数据,解析阿里云、Zendesk、华为云、科大讯飞四大主流系统在大模型应用、全渠道整合、高并发承载等核心能力,结合企业场景提供选型指南,助力电商高效决策。
2025 电商智能客服系统推荐:高转化、低成本的客服解决方案
|
5月前
|
人工智能 数据可视化 数据库连接
保姆级教程 | 0代码,用n8n一键打通微信、钉钉与数据库,效率提升500%
n8n是一款开源可视化自动化工具,无需编程即可连接微信、钉钉、数据库等400+服务。通过拖拽节点搭建工作流,实现数据同步、消息通知等自动化,效率提升500%。支持免费私有部署,安全可控,零成本开启高效办公新体验。
|
JSON 监控 Java
Elasticsearch 8.X reindex 源码剖析及提速指南
Elasticsearch 8.X reindex 源码剖析及提速指南
|
小程序 定位技术
uniapp微信小程序地图全屏显示配送范围
uniapp微信小程序地图全屏显示配送范围
509 1
|
开发框架 前端开发 JavaScript
【Uniapp 专栏】Uniapp 中的动画效果实现与特性
【5月更文挑战第13天】Uniapp是一款跨平台开发框架,提供丰富的动画效果以提升用户体验和应用吸引力。基于CSS和JavaScript动画,支持转场、元素等多种动画类型,确保跨平台一致性并优化性能。通过CSS属性或JavaScript库实现动画,结合页面布局和手势操作,创造沉浸式交互。通过调试和优化,开发者可打造惊艳效果,适应未来技术发展,提升应用竞争力。
1314 1
【Uniapp 专栏】Uniapp 中的动画效果实现与特性
|
存储 NoSQL 算法
分布式唯一 ID 的 7 种生成方案
在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要的。下面我们一一来列举一下,不一定全部适合,这些解决方案仅供你参考,或许对你有用。
分布式唯一 ID 的 7 种生成方案
|
存储 自然语言处理 关系型数据库
Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别
【7月更文挑战第3天】Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别
|
负载均衡 应用服务中间件 网络安全
NGINX配置详解
NGINX配置详解