0

0

在Java里CyclicBarrier和CountDownLatch区别_Java同步工具说明

P粉602998670

P粉602998670

发布时间:2026-02-06 10:35:06

|

154人浏览过

|

来源于php中文网

原创

CountDownLatch适用于一次性等待所有操作完成,不可重置;CyclicBarrier适用于多线程循环协同,可重置并支持屏障中断与回调。二者语义不同,不可互换。

在java里cyclicbarrier和countdownlatch区别_java同步工具说明

CountDownLatch 适合“等待一组操作全部完成”

它是一次性使用的计数器,初始化时指定一个 count,每次调用 countDown() 就减一,调用 await() 的线程会阻塞直到计数归零。常见于:主线程等所有子任务跑完再继续、服务启动时等待多个组件初始化完毕。

注意点:

  • CountDownLatch 不能重置,一旦计数到 0,后续所有 await() 都立即返回
  • 没有“唤醒所有等待线程后自动重置”的机制,所以不适合循环场景
  • 如果某线程调用 await() 后被中断,会抛 InterruptedException,需自行处理

CyclicBarrier 适合“多线程分阶段协同执行”

它更像一个“集合点”,多个线程各自执行一段逻辑后,在 await() 处等待彼此到达;当最后一个线程到达,所有线程同时被释放,并可选择执行一个 Runnable(如汇总统计)。典型场景:并行计算分片处理 + 汇总、多玩家准备就绪后开始游戏回合。

关键行为:

android中音频视频开发教程 中文WORD版
android中音频视频开发教程 中文WORD版

媒体包提供了可管理各种媒体类型的类。这些类可提供用于执行音频和视频操作。除了基本操作之外,还可提供铃声管理、脸部识别以及音频路由控制。本文说明了音频和视频操作。 本文旨在针对希望简单了解Android编程的初学者而设计。本文将指导你逐步开发使用媒体(音频和视频)的应用程序。本文假定你已安装了可开发应用程序的Android和必要的工具,同时还假定你已熟悉Java或掌握面向对象的编程概念。感兴趣的朋友可以过来看看

下载

立即学习Java免费学习笔记(深入)”;

  • CyclicBarrier 可重复使用,计数归零后自动重置为初始值
  • 支持带超时的 await(long timeout, TimeUnit unit),超时后会抛 TimeoutException 并打破屏障
  • 任一线程在 await() 时被中断或超时,整个屏障进入 broke 状态,其他等待线程也会收到 BrokenBarrierException

别把它们当“可互换的等待工具”用

表面上都让线程等,但设计意图完全不同:

  • CountDownLatch 实现“多线程等一个信号”很简单,但反过来模拟 CyclicBarrier 的循环协作就得自己加锁 + 重置逻辑,容易出错
  • CyclicBarrier 做一次性等待也可以,但它的异常传播机制(BrokenBarrierException)和重入特性在单次场景里是冗余负担
  • 性能上差异不大,但语义误用会导致调试困难——比如看到 BrokenBarrierException 却用了 CountDownLatch,说明代码逻辑和工具选型不匹配

一个容易忽略的细节:线程到达顺序不影响 CyclicBarrier 行为

CyclicBarrier 不关心谁先到、谁后到,只关心“是否凑够 parties 个”。但要注意:Runnable 回调(如果设置了)是由最后一个到达的线程执行的,不是由某个固定线程执行。这意味着:

  • 回调里不要做耗时操作,否则会拖慢最后一个线程,进而影响下一轮等待的启动
  • 回调中若抛异常,会导致所有等待线程收到 BrokenBarrierException
  • 如果想在回调里安全更新共享状态,得确保该状态本身是线程安全的,或者回调已处于临界区保护下

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

198

2023.11.20

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

610

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

281

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

23

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

7

2026.02.06

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

281

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

21

2026.01.21

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

57

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.3万人学习

C# 教程
C# 教程

共94课时 | 8.6万人学习

Java 教程
Java 教程

共578课时 | 58.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号