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