深入理解JUC:第五章:CyclicBarrier循環(huán)柵欄

理論:

它的作用就是會讓所有線程都等待完成后才會繼續(xù)下一步行動。

舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,有些朋友可能會晚到,但是這個餐廳規(guī)定必須等到所有人到齊之后才會讓我們進去。這里的朋友們就是各個線程,餐廳就是 CyclicBarrier。
未使用循環(huán)柵欄的代碼:

    public class Demo {
     
        public static void main(String[] args) throws Exception{
            for (int i = 1; i <= 6; i++) {
                final int tempInt = i;
                new Thread(()->{
                    System.out.println(tempInt+"朋友到了");
                },String.valueOf(i)).start();
            }
            System.out.println("朋友全部到了,才開始吃飯");
        }
    }

控制臺:

使用CyclicBarrier的代碼:

    import java.util.concurrent.BrokenBarrierException;
    import java.util.concurrent.CyclicBarrier;
     
     
    public class Demo {
     
        public static void main(String[] args) throws Exception{
            CyclicBarrier cyclicBarrier = new CyclicBarrier(6,()->{System.out.println("朋友全部到了,才開始吃飯");});
            for (int i = 1; i <= 6; i++) {
                final int tempInt = i;
                new Thread(()->{
                    System.out.println(tempInt+"朋友到了");
                    try {
                        cyclicBarrier.await();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                },String.valueOf(i)).start();
     
            }
        }
    }

控制臺: