循环栅栏 可以在多线程协作时控制线程同步执行
比如 A 1s执行完毕 B5s执行完毕
那么A执行完后需要等待B执行完 然后才能进行下一轮
public static void main(String[] args) {
//循环栅栏
CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
//开启三个线程
for (int i = 0; i < 3; i++) {
new MyThread(cyclicBarrier).start();
}
}
static class MyThread extends Thread {
CyclicBarrier cyclicBarrier;
public MyThread(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
while (true) {
try {
System.out.println(Thread.currentThread().getName() + "=执行业务方法");
Thread.sleep(new Random().nextInt(10000));
cyclicBarrier.await();
//相当于一个栅栏
//只有所有的线程都执行到这里时 才能开始下一步
System.out.println(Thread.currentThread().getName() + "开始下一轮执行");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}