1. 程式人生 > >執行緒十六:CyclicBarrier

執行緒十六:CyclicBarrier

"同步屏障"指的是一組執行緒互相等待,直到到達某個公共的屏障點。"同步屏障"通常用在數量固定且在執行過程中需要等待彼此執行的多執行緒應用中。

CyclicBarrier類實現了同步屏障,可以通過使用構造器CyclicBarrier(int parties)來建立其物件,其中的parties代表擁有共同執行目標的執行緒數量,也可以通過構造器CyclicBarrier(int parties,Runnable barrierAction)來建立指定任務的同步屏障,其特點是最後一條執行緒到達屏障點之後會執行barrierAction任務,然後其他執行緒繼續執行。構造器引數的parties如果小於1,構造器會丟擲異常,如果把barrierAction設定為null,那麼當最後一條執行緒跨越屏障時不會執行任務。

CyclicBarrier定義瞭如下的方法:1.await方法會強制呼叫執行緒一直等待,直到所有的執行緒都執行了await方法。2.await(long timeout,TimeUnit unit)與前一個方法的區別是增加了等待的時間,其他功能一樣。3.getNumberWaiting方法返回當前在同步屏障上等待的執行緒數目。4.getParties方法返回要跨越屏障的執行緒數目。5.reset方法會重置屏障到初始狀態,這個方法並不常用。

為了演示同步屏障CyclicBarrier的應用,我們看一個例子:

這個例子是Javadoc文件中給出的示例程式碼,演示瞭如何使用3個執行緒完成一個二維陣列的處理過程,當處理結束後把結果打印出來。

參考連結