2.CyclicBarrier简介

CyclicBarrier需要每个线程都准备好后才能继续执行,否则所有线程继续等待
public class P08UseCyclicBarrier
{   
    static class Runner implements Runnable{
        private CyclicBarrier barrier;
        private String name;
        public Runner(CyclicBarrier barrier,String name)
        {
            this.barrier = barrier;
            this.name = name;
        }
        @Override
        public void run()
        {
            try
            {
                Thread.sleep(1000 * (new Random()).nextInt(5));
                System.out.println(name + " 准备OK");
                barrier.await(); //该线程准备好了,但要阻塞,等待别的线程准备好
            }
            catch (InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (BrokenBarrierException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println(name + " Go!!");//所有线程都准备好后执行  
        }
        
    }
    public static void main(String[] args)
    {
        //需要await()被调用三次,才能继续执行
        CyclicBarrier barrier = new CyclicBarrier(3);
        new Thread(new Runner(barrier, "小明")).start();
        new Thread(new Runner(barrier, "小王")).start();
        new Thread(new Runner(barrier, "小李")).start();
       
    }
}


执行结果



猜你喜欢

转载自blog.csdn.net/js54100804/article/details/78783864
今日推荐