CyclicBarrier類淺析

CyclicBarrier

CyclicBarrier也可以向CountDownLatch`一樣,協調多個線程的執行。只是略有不同的是,CountDownLatch是減至0,而CyclicBarrier是加至某個數字

舉例:就好比 只有集齊了7顆龍珠才能召喚神龍

常用API方法如下

CyclicBarrier(int parties) 創建一個新的 CyclicBarrier,它將在給定數量的參與者(線程)處於等待狀態時啓動,但它不會在每個 barrier 上執行預定義的操作。
CyclicBarrier(int parties, Runnable barrierAction)
創建一個新的 CyclicBarrier,它將在給定數量的參與者(線程)處於等待狀態時啓動,並在啓動 barrier 時執行給定的屏障操作,該操作由最後一個進入 barrier 的線程執行。

舉例:

public class CyclicBarrierDemo {

    public static void main(String[] args) {

        CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> System.out.println("召喚神龍"));


        for (int i = 1; i <= 7; i++) {
            new Thread(() -> {

                try {
                    System.out.println(Thread.currentThread().getName() + "正在找龍珠~");
                    Thread.sleep(2 * 1000);
                    System.out.println(Thread.currentThread().getName() + "找到龍珠~");
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }

            }, String.valueOf("線程" + i)).start();
        }


    }
}

結果:

線程1正在找龍珠~
線程2正在找龍珠~
線程3正在找龍珠~
線程4正在找龍珠~
線程5正在找龍珠~
線程6正在找龍珠~
線程7正在找龍珠~
線程1找到龍珠~
線程4找到龍珠~
線程6找到龍珠~
線程3找到龍珠~
線程2找到龍珠~
線程7找到龍珠~
線程5找到龍珠~
召喚神龍

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