由於cyclicbarrier計數達到指定後會重新迴圈使用,所以cyclicbarrier可以用在所有子執行緒之間互相等待多次的情形。
比如在某種需求中,比如乙個大型的任務,常常需要分配好多子任務去執行,只有當所有子任務都執行完成時候,才能執行主任務,這時候,就可以選擇cyclicbarrier了。
應用場景:
乙個大型的任務,常常需要分配好多子任務去執行,只有當所有子任務都執行完成時候,才能執行主任務
案例**:
public class cyclicbarriertest catch (interruptedexception e) catch (brokenbarrierexception e) {
e.printstacktrace();
//主任務
private static class maintask implements runnable{
private int sum;
public maintask(int sum) {
this.sum=sum;
@override
public void run() {
int sum_1=0;
for(int i=0;isystem.out.println("i:"+i+"---"+sum[i]);
sum_1+=sum[i];
system.out.println("總和:"+sum_1);
public static void main(string args) {
intsum=new int[5];
//當所有子任務完成時,計數器為0,執行主任務。
cyclicbarrier barrier=new cyclicbarrier(5,new maintask(sum));
executorservice exec=executors.newfixedthreadpool(5);
for(int i=0;i<5;i++){
exec.execute(new subtask(sum, i, barrier));
exec.shutdown();
CyclicBarrier實現原理
cyclicbarrier是乙個同步輔助類,它允許一組執行緒互相等待,直到所有執行緒都到達某個公共屏障點 也可以叫同步點 即相互等待的執行緒都完成呼叫await方法,所有被屏障攔截的執行緒才會繼續執行await方法後面的程式。在涉及一組固定大小的執行緒的程式中,這些執行緒必須不時地互相等待,此時cy...
同步屏障CyclicBarrier
cyclicbarrier操作excel public class bankwaterservice implements runnable private void count throws exception 計算當前sheet的銀流資料,計算 省略 sheetbankwatercount.pu...
CyclicBarrier 使用詳解
從字面上的意思可以知道,這個類的中文意思是 迴圈柵欄 大概的意思就是乙個可迴圈利用的屏障。它的作用就是會讓所有執行緒都等待完成後才會繼續下一步行動。舉個例子,就像生活中我們會約朋友們到某個餐廳一起吃飯,有些朋友可能會早到,有些朋友可能會晚到,但是這個餐廳規定必須等到所有人到齊之後才會讓我們進去。這裡...