CountDownLatch(减法)
CountDownLatch允许一个或者多个线程去等待其他线程完成操作。
CountDownLatch countDownLatch = new CountDownLatch(10);
for(int i=1;i<=10;i++){
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"玩家准备完成");
countDownLatch.countDown();
},String.valueOf(i)).start();
}
countDownLatch.await();
System.out.println(Thread.currentThread().getName()+"游戏开始");
CyclicBarrier(加法)
让一组线程达到一个屏障(同步点)时被阻塞,直到最后一个线程达到屏障时才会开门,所有被拦截的线程才会继续执行
CyclicBarrier cyclicBarrier = new CyclicBarrier(5,()-> System.out.println("人齐了吃饭"));
for (int i = 1; i <= 10; i++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"人到了");
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
},String.valueOf(i)).start();
}
CountDownLatch和CyclicBarrier区别