CyclicBarrier的字面意思就是可循环(Cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await方法。
package com.atnuocai.model;import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;/*** Created by on 27/11/2021*CyclicBarrier的字面意思就是可循环(Cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,* 直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await方法。** CyclicBarrier与CountDownLatch的区别:CyclicBarrier可重复多次,而CountDownLatch只能是一次。** 程序演示集齐7个龙珠,召唤神龙* @author 刘杰杰*/
public class CyclicBarrierDemo {public static void main(String[] args){cyclicBarrier();}private static void cyclicBarrier() {CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> {System.out.println("****集成七颗龙珠,召唤神龙");});for (int i = 1; i<= 7 ;i++){final int tempInt = i;new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t 收集到:"+tempInt+"龙珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}},String.valueOf(i)).start();}}}