CyclicBarrier浅谈
CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。
public class cyclicBarrier { private static final int THREAD_NUM = 5; public static class Worker implements Runnable{ CyclicBarrier barrier; public Worker(CyclicBarrier b){ this.barrier = b; } @Override public void run() { try{ System.out.println("ID:"+Thread.currentThread().getId()+" Worker's waiting"); barrier.await();//此处为线程执行的指定位置!!!!! System.out.println("ID:"+Thread.currentThread().getId()+" Working"); }catch(Exception e){ e.printStackTrace(); } } } public static void main(String[] args) { CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable(){ @Override public void run() {//当所有Worker线程都到达指定位置,开始执行指定位置后的代码前执行此处代码 System.out.println("所有工作线程已经全部执行到指定位置"); } }); for (int i = 0; i < THREAD_NUM; i++) { new Thread(new Worker(cb)).start(); } } } ###当每个Worker线程执行到指定位置时,CyclicBarrier计数器会减一并暂停在指定位置,当所有Worker线程都执行到指定位置,
也就是计数器清空时,所有线程开始并行执行指定位置后面的代码
运行结果: