CyclicBarrie
CyclicBarrie与CountdownLatch相似,都可以用来模拟高并发场景,它可以用来阻塞每个线程,当满足某个条件之后释放线程,与CountdownLatch阻塞多个线程最后释放相似,例如显示生活中的开会,当所有人都到齐之后开始开会,每个线程都会执行阻塞之后也就是await方法之后的操作
public static void main(String[] args) {
final CyclicBarrier cyclicBarrier = new CyclicBarrier(10,()->{
System.out.println("所有人都准备好了裁判开始了");
});
for (int i = 0; i < 10; i++) {
//lambda中只能只用final的变量
final int times = i;
new Thread(() -> {
try {
System.out.println("子线程" + Thread.currentThread().getName() + "正在准备");
Thread.sleep(1000 * times);
System.out.println("子线程" + Thread.currentThread().getName() + "准备好了");
cyclicBarrier.await();
System.out.println("子线程" + Thread.currentThread().getName() + "开始跑了");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
}