允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。 屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。
它的作用就是会让所有线程都等待完成后才会继续下一步行动。
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();
}
}
}