###CyclicBarrier是什么
同步屏障
设置N个线程,等到所有的线程都await后,达到屏障,然后大家一起再往下执行。
###实例
public class CyclicBarrierTest {
public static void main(String[] args) {
final CyclicBarrier cyclicBarrier=new CyclicBarrier(2);
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
cyclicBarrier.await();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程1执行");
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(10000);
cyclicBarrier.await();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("线程2执行");
}
}).start();
}
}
###注意
如果设置了3个线程到达屏障,如果只有2个线程到达屏障。那么这2个线程永远无法执行下去
###实现原理
使用ReentactLock 的condition.await 来到达屏障。
等所有的线程都到屏障时,再执行 conditon.signal方法唤醒。