一、简介
栅栏CyclicBarrier的作用就是等待一组线程都准备好了,然后执行某个任务。这与CountDownLatch很相似。
但是CyclicBarrier和CountDownLatch是有区别的:
1)CyclicBarrier可以复用,你可以调用Reset方法重新初始化;CountDownLatch是一次性的。
2)CyclicBarrier是一组线程相互等待,而CountDownLatch是一个或一组线程等待另外一个或者一组线程。
JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/CyclicBarrier.html
二、示例
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class CyclicBarrierDemo { private static CyclicBarrier barrier = new CyclicBarrier(3, new Runnable() { @Override public void run() { System.out.println("全都到齐了"); } }); public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 3; i++) { new Thread(() -> { try { barrier.await(); System.out.println("end await"); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }).start(); System.out.println("启动 i=" + i); Thread.sleep(1000); } } }