线程的并发工具类 --- CyclicBarrier

CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做 的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一 个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。

CyclicBarrier 默认的构造方法是 CyclicBarrier(intparties),其参数表示屏障拦截 的线程数量,每个线程调用 await 方法告诉 CyclicBarrier 我已经到达了屏障,然 后当前线程被阻塞。 CyclicBarrier 还提供一个更高级的构造函数 CyclicBarrier(intparties, Runnable barrierAction),用于在线程到达屏障时,优先执行 barrierAction,方便处理更复 杂的业务场景。 CyclicBarrier 可以用于多线程计算数据,最后合并计算结果的场景。

CountDownLatch和CyclicBarrier辨析 

CountDownLatch 的计数器只能使用一次,而 CyclicBarrier 的计数器可以反复使用。 

CountDownLatch.await 一般阻塞工作线程,所有的进行预备工作的线程执行 countDown,而 CyclicBarrier 通过工作线程调用 await 从而自行阻塞,直到所有工 作线程达到指定屏障,再大家一起往下走。 

在控制多个线程同时运行上,CountDownLatch 可以不限线程数量,而 CyclicBarrier 是固定线程数。 

同时,CyclicBarrier 还可以提供一个 barrierAction,合并多线程计算结果。

发布了18 篇原创文章 · 获赞 4 · 访问量 153

猜你喜欢

转载自blog.csdn.net/weixin_42081445/article/details/104907428