自建网站推广的最新发展网站建设情况调研报告
引言
在多线程编程中,你是否遇到过这样的需求?
-  
多线程分阶段处理数据,每个阶段完成后等待其他线程
 -  
并行计算任务需要多次同步汇总结果
 -  
模拟高并发场景下多个线程同时触发操作
 
CyclicBarrier(循环屏障)正是解决这类问题的神器!与CountDownLatch不同,它支持重复使用和自定义屏障动作,但许多开发者对其底层原理和进阶用法一知半解。本文将通过多个实战案例和源码解析,带你彻底掌握这一核心工具!
一、CyclicBarrier核心原理
1.1 核心设计思想
-  
屏障机制:指定线程数(
parties),当线程调用await()时计数减1并等待,直到所有线程到达屏障后继续执行。 -  
可重用性:屏障被触发后自动重置,可重复使用(通过
Generation实现)。 -  
屏障动作:所有线程到达屏障后,可执行指定
Runnable(由最后一个到达的线程执行)。 
1.2 与CountDownLatch的对比
| 特性 | CyclicBarrier | CountDownLatch | 
|---|---|---|
| 重置能力 | 支持循环使用 | 一次性使用 | 
| 触发方式 | 由等待线程自身触发 | 由外部线程调用countDown() | 
| 屏障动作 | 支持自定义Runnable | 不支持 | 
二、基础使用与实战案例
2.1 多线程分阶段处理数据
import java.util.concurrent.BrokenBarrierException;  
import java.util.concurrent.CyclicBarrier;  public class StageProcessingDemo {  public static void main(String[] args) {  int workerCount = 3;  CyclicBarrier barrier = new CyclicBarrier(workerCount, () ->  System.out.println("所有线程完成本阶段处理,进入下一阶段!")  );  for (int i = 0; i < workerCount; i++) {  new Thread(() -> {  try {  System.out.prin