标签:
CyclicBarrier用于模拟所有线程都到达一个临界条件后在进行下一步,CyclicBarrier使用在run函数里面
下面是一个使用例子
package com.condition; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CyclicBarrierTest { public static void main(String[] args) { ExecutorService threadPool = Executors.newCachedThreadPool(); final CyclicBarrier cb = new CyclicBarrier(3); for(int i = 0; i < 3;i++){ Runnable runnable = new Runnable(){ @Override public void run() { try { Thread.sleep((long) (Math.random()*10000)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(1+Thread.currentThread().getName() +" 当前已有 "+cb.getNumberWaiting()); try { cb.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BrokenBarrierException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Thread.sleep((long) (Math.random()*10000)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(2+Thread.currentThread().getName() +" 当前已有 "+cb.getNumberWaiting()); try { cb.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BrokenBarrierException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; threadPool.execute(runnable); } } }
标签:
原文地址:http://www.cnblogs.com/hzmbbbb/p/4280293.html