Java并发同步工具类之CyclicBarrier

CyclicBarrier循环栅栏,允许多个线程相互等待,直到到达一个共同的障碍点。非常适用的场景是一定数量的线程之间需要相互等待彼此。CyclicBarrier因为有Cyclic,所以可以循环使用。


class CyclicBarrierTest {
    private static Logger logger = LoggerFactory.getLogger(CyclicBarrierTest.class);
    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3);

        System.out.println("cyclicBarrierTest begin...");
        new Runner(cyclicBarrier,"zs").start(); // 启动三个子线程         new Runner(cyclicBarrier,"ls").start();
        new Runner(cyclicBarrier,"ww").start();

        System.out.println("cyclicBarrierTest end ...."); //主线程不会阻塞,所以启动子线程之后,这里会马上执行     }

    static class Runner extends Thread{
        private CyclicBarrier cyclicBarrier ;
        private String name;

        public Runner(CyclicBarrier cyclicBarrier,String name){
            this.cyclicBarrier = cyclicBarrier;
            this.name = name;
        }

        @Override
        public void run(){
            try {
                Thread.currentThread().sleep(1000);
                System.out.println(name+": is ready....");
                cyclicBarrier.await(); // 三个子线程会在这里进行第一步的等待 (与主线程无关)当三个子线程都执行完成之后,会同时进行下一步的工作                  Thread.currentThread().sleep(1000);
                System.out.println(name+": is running...");
                cyclicBarrier.await(); // 三个子线程会在这里进行第二步的等待(与主线程无关)当三个子线程都执行完成之后,会同时进入下一步的操作                  Thread.currentThread().sleep(1000);
                System.out.println(name+": is complete..."); //执行完成之后,子线程退出              }catch (Exception e){
                logger.error("Runner run method cause exception : ",e);

            }

        }
    }
}

你可能感兴趣的:(多线程,同步,Cyclicbarrier,java并发)