发布于2026-07-08 阅读(0)
扫一扫,手机访问
CyclicBarrier 本质上是一个“集体就位、统一放行”的同步工具。简单来说,它不看你谁先做完,而是要求所有线程必须在同一个屏障点集合完毕,然后一起出发。而且这个过程可以反复执行,这才是它名字里“Cyclic”的由来。

在使用 CyclicBarrier 时,你需要事先确定参与协作的线程数量。比如 new CyclicBarrier(3),意思就是每一轮必须有且仅有 3 个线程调用 await()。每个线程干完自己的活儿后,主动调用 await() 说“我到了”,然后自己挂起等待。直到最后一个线程也调用了 await(),计数器归零,屏障被触发,所有等待线程才会被同时唤醒,一起进入下一步。
这里有几个值得注意的细节:
CyclicBarrier 和 CountDownLatch 最大的不同就在这里——它支持自动重置。当所有线程通过屏障后,内部计数器会自动恢复成初始值,不需要你重新 new 一个对象,直接就能投入下一轮同步。这个特性让它在周期性协作场景中格外好用:
CyclicBarrier 还允许你传入一个 Runnable 作为 barrierAction,由最后一个到达屏障的线程(在释放其他线程之前)串行执行这个动作。这个位置非常适合做集中式的协调操作:
需要注意的是,这个动作一定要轻量,毫秒级完成,否则会成为瓶颈。另外,它不能抛出未捕获的异常,否则屏障会直接破损。
现实中的线程可能因为各种原因卡住,所以 CyclicBarrier 提供了带超时的 await(long, TimeUnit) 方法:
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8