11.CyclicBarrier
1.定义
CyclicBarrier的字面意思就是可循环(Cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await方法。
CyclicBarrier与CountDownLatch的区别:CyclicBarrier可重复多次,而CountDownLatch只能是一次。
2.程序演示集齐7个龙珠,召唤神龙
package com.mydemo; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class SummonTheDragonDemo { public static void main(String[] args) { CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{ System.out.println("召唤神龙!"); }); for (int i = 0; i < 7; i++) { final int i1=i; new Thread(()->{ System.out.println("收集到第"+i1+" 颗龙珠"); try { cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } },String.valueOf(i1)).start(); } } }
3.执行结果
收集到第0 颗龙珠
收集到第1 颗龙珠
收集到第2 颗龙珠
收集到第3 颗龙珠
收集到第4 颗龙珠
收集到第5 颗龙珠
收集到第6 颗龙珠
召唤神龙!