允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。 屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。 它的作用就是会让所有线程都等待完成后才会继续下一步行动。
public CyclicBarrier(int parties, Runnable barrierAction)parties :是参与线程的个数 Runnable 参数,这个参数的意思是最后一个到达线程要做的任务
重要的方法:
public int await() throws InterruptedException, BrokenBarrierException public int await(long timeout, TimeUnit unit)线程调用 await() 表示自己已经到达栅栏
简单示例
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class Test05 { public static void main(String[] args) { //类似一个加法计数器 CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{ System.out.println("召唤神龙成功"); }); for (int i = 1; i <= 7; i++) { final int temp = i;//加final的原因 new Thread(()->{ System.out.println(Thread.currentThread().getName()+"收集了第"+temp+"课龙珠"); try { cyclicBarrier.await();//等待计数器变为7,如果计数器为8,则程序无法结束 } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }).start(); } } }