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线程都执行到指定位置,
也就是计数器清空时,所有线程开始并行执行指定位置后面的代码

 运行结果:

 

posted @ 2017-05-04 17:31  暗夜心慌方  阅读(88)  评论(0编辑  收藏  举报