CountDownLatch和CyclicBarrier区别?

(1)CountDownLatch计数器只能使用一次,CyclicBarrier计数器可以使用reset方法重置。
(2)CountDownLatch,描述的是一个或N个线程等待其他线程的关系(等待完成某项操作,强调完成某项操作),CyclicBarrier,各个线程之间内部相互等待的关系。(所有的线程必须全部到达栅栏位置,才继续执行,强调线程)。

@Slf4j
public class CyclicBarrierExample1 {

  private static CyclicBarrier barrier = new CyclicBarrier(5);

  public static void main(String[] args) throws Exception {

    ExecutorService executor = Executors.newCachedThreadPool();

    for (int i = 0; i < 10; i++) {
      final int threadNum = i;
      Thread.sleep(1000);
      executor.execute(
          () -> {
            try {
              race(threadNum);
            } catch (Exception e) {
              log.error("exception", e);
            }
          });
    }
    executor.shutdown();
  }

  private static void race(int threadNum) throws Exception {
    Thread.sleep(1000);
    log.info("{} is ready", threadNum);
    barrier.await();
    log.info("{} continue", threadNum);
  }
}

CyclicBarrierExample1