讓一組執行緒達到乙個同步點時被阻塞,直到最後乙個執行緒達到同步點,這時候屏障才會放行,所有被屏障攔截的執行緒才會繼續執行。
構造方法:
public cyclicbarrier(int
parties)
public cyclicbarrier(int
parties
,runnable r)
構造引數表示屏障攔截的執行緒數,每乙個執行緒呼叫await方法告訴屏障,他已經到達屏障,然後技術器減一,直到計數器為0.當前執行緒被阻塞。如果構造的執行緒多於執行的執行緒,即到達屏障的執行緒數 < parties,那麼屏障會一直等,所有到達的執行緒都不會繼續執行,一直處於阻塞狀態。
如果構造引數包括乙個runnable, 那麼這個執行緒會優先執行。
public
classcyclicbarrierclient catch (exception e)
system.out
.println("nicky");
system.out
.println("belly"); }
},"thread1").start();
try catch (exception e)
system.out
.println("last"); }
static
class worker implements runnable }
}首先優先執行worker,然後在都達到屏障時,執行執行緒1和主線程的東西,注意,並不一定執行緒一先執行,有可能主線程先執行。因為主線程並不會說等執行緒1執行完了在執行。
countdownlatch 和 cyclicbarrier 比較:
countdownlatch:其計數器只能使用一次
cyclicbarrier: 其技術器可以通過reset重複使用
併發工具類(二)同步屏障CyclicBarrier
前言 簡介cyclicbarrier 的字面意思是可迴圈使用 cyclic 的屏障 barrier 它要做的事情是,讓一組執行緒到達乙個屏障 也可以叫同步點 時被阻塞,直到最後乙個執行緒到達屏障時,屏障才會開門,所有被屏障攔截的執行緒才會繼續幹活。cyclicbarrier預設的構造方法是cycli...
同步屏障CyclicBarrier
cyclicbarrier操作excel public class bankwaterservice implements runnable private void count throws exception 計算當前sheet的銀流資料,計算 省略 sheetbankwatercount.pu...
核心同步之Seq鎖和屏障
5.完成變數 如果在核心中乙個任務需要發出訊號通知另乙個任務發生了某個特定事件,利用完成變數 completion variable 是兩個任務得以同步的簡單方法。完成變數由結構completion表示,在中。靜態初始化 declare copletion my comp 執行時動態初始化 int ...