CyclicBarrier的簡單理解

CyclicBarrier的概念

字面翻譯爲迴環柵欄,同CountDownLatch一樣,也是concurrent包中提供的多線程之間通信的一種方式。它允許一組線程在等待某個狀態後再全部同時執行。它允許一組線程互相等待對方,直到到達一個公共障礙點(barrier point)。它的一個典型應用是一組固定個數的線程需要互相等待,直到全部執行完成後,再繼續執行。

之所以稱爲Cyclic,是因爲所有等待線程被釋放後,它還可以被重用(re-used),這是它區別於CountDownLatch的一個特徵。

CyclicBarrier的用法

CyclicBarrier提供了兩個構造方法:

public CyclicBarrier(int parties) {
    this(parties, null);
}

public CyclicBarrier(int parties, Runnable barrierAction) {
    if (parties <= 0) throw new IllegalArgumentException();
    this.parties = parties;
    this.count = parties;
    this.barrierCommand = barrierAction;
}

其中一個構造方法接收一個Runnable任務,當個數爲parties的線程全部調用了await()方法後,CyclicBarrier會選擇其中一個線程來執行barrierAction任務(詳見 http://www.importnew.com/21889.html)。

發佈了88 篇原創文章 · 獲贊 105 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章