java多线程系列9 高级同步工具(3) CyclicBarrier
CyclicBarrier
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) 然后一再执行
public class CyclicBarrierTest { public static void main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(3); //这里定义的是3 也就是必须三个线程中 都调用了barrier.await()方法才可以执行await后面的代码 不然一直等待 CyclicBarrier barr = new CyclicBarrier(3); pool.submit( new Thread(new Runner(barr, "c1"))); pool.submit( new Thread(new Runner(barr, "c2"))); pool.submit( new Thread(new Runner(barr, "c3"))); pool.shutdown(); } } class Runner implements Runnable{ private CyclicBarrier barrier ; private String name ; public Runner(CyclicBarrier barrier, String name) { super(); this.barrier = barrier; this.name = name; } @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } System.out.println(name+" 准备 "); try { // await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。 barrier.await(); } catch (Exception e) { e.printStackTrace(); } System.out.println(name+" go "); } }
运行结果如下
在这里 需要说下和CountDownLatch的区别
CountDownLatch 阻塞的是 主线程
CyclicBarrier 阻塞的是子线程
CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。
posted on 2017-06-05 18:03 一只小蜗牛12138 阅读(163) 评论(0) 编辑 收藏 举报