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)。