天天看點

CyclicBarrier

CyclicBarrier

字面意思回環栅欄,通過它可以實作讓一組線程等待至某個狀态之後再全部同時執行。叫做回環是因為當所有等待線程都被釋放以後,CyclicBarrier可以被重用。我們暫且把這個狀态就叫做barrier,當調用await()方法之後,線程就處于barrier了。

一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。

在涉及一組固定大小的線程的程式中,這些線程必須不時地互相等待,此時 CyclicBarrier 很有用。

因為該 barrier 在釋放等待線程後可以重用,是以稱它為循環 的 barrier。

CyclicBarrier 支援一個可選的 Runnable 指令,在一組線程中的最後一個線程到達之後(但在釋放所有線程之前),該指令隻在每個屏障點運作一次。

若在繼續所有參與線程之前更新共享狀态,此屏障操作 很有用。

主要方法:

//設定barties(障點對象)、count(等待的線程數)及barrierCommand(Runnable)屬性。  

public CountDownLatch(int count) {  };  //參數count為計數值

public void await() throws InterruptedException { };   //調用await()方法的線程會被挂起,它會等待直到count值為0才繼續執行

public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };  //和await()類似,隻不過等待一定的時間後count值還沒變為0的話就會繼續執行

public void countDown() { };  //将count值減1

//當await的數量到達了設定的數量後,首先執行該Runnable對象。  

CyclicBarrier(int,Runnable):  

//通知barrier已完成線程  

await(): //讓目前線程處理wait狀态

Output:

or:

http://blog.csdn.net/huang_xw/article/details/7090152