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();
       
    }
}


執行結果



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章