源码:java.util.concurrent.CyclicBarrier 源码解析
1. TODO
2. 脑图
Xmind
Edraw
Hexo 地址
👉 http://blog.wangjia.ink/2025/11/19/源码:java.util.concurrent.CyclicBarrier源码解析/
3. 基础部分
3.1. CyclicBarrier 概述
CyclicBarrier 是一个具体类
循环栅栏(CyclicBarrier)可以简单的理解为 CountDownLatch 的一个变种。我们使用 CountDownLatch 实现汇总模式(主线程等待、子线程减数)、发令枪模式(子线程等待,主线程减数)时,会发现它们总是需要另一方来触发减数,像是缺少一个 “点火” 键
而 CyclicBarrier 是参与线程既减数,也等待。假设需要 10 个线程到达同步点,前 9 个线程在到达同步点后,都会减数然后等待,此时计数从 10 ➔ 1。当最后一个线程到达同步点时,也会减数然后等待,此时计数从 1 ➔ 0,所有线程同时继续向下执行。整个过程不需要额外的 “点火” 键,实现了 “线程互相等待”
[!NOTE] 注意事项
CountDownLatch是使用AQS实现的,而CyclicBarrier是使用ReentrantLock实现的CountDownLatch是一次性的,而CyclicBarrier是可重复使用的- 简单理解
CountDownLatch、CyclicBarrier、Semaphore:
CountDownLatch是门闩开启才能继续执行CyclicBarrier是 “互相等待” 都准备好才能继续执行Semaphore是拿到 “许可证” 才能继续执行
3.2. CyclicBarrier 应用场景
3.2.1. 并发压力测试
源码:java.util.concurrent.CyclicBarrier 源码解析
https://wangjia5289.github.io/2025/11/19/源码:java.util.concurrent.CyclicBarrier源码解析/