一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用。因为该barrier在释放等待线程后可以重用,所以称它为循环 的barrier。
CyclicBarrier 支持一个可选的 Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。
示例用法:下面是一个在并行分解设计中使用 barrier 的例子:
classSolver {final intN;final float[][] data;finalCyclicBarrier barrier;class Worker implementsRunnable {intmyRow;
Worker(introw) {
myRow=row;
}public voidrun() {while (!done()) {
processRow(myRow);try{
barrier.await();
}catch(InterruptedException ex) {return;
}catch(BrokenBarrierException ex) {return;
}
}
}
}public Solver(float[][] matrix) {
data=matrix;
N=matrix.length;
barrier= new CyclicBarrier(N, n