1. 通常认识

  1. CountDownLatch是减计数、CyclicBarrier是加计数
  2. CountDownLatch没法reset被复用、CyclicBarrier可以reset被复用

2. 更多思考

首先看下JAVA DOC的说明:

CountDownLatch: A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.
CyclicBarrier: A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point.

让我们来根据使用场景来进一步了解他们的差别:
从doc描述来看,CountDownLatch侧重于线程中operations执行完毕。例如某个场景需要等待线程A中的方法a()被调用100次后,我再执行线程M.afterWorks()。这个用CyclicBarrier来实现就比较不太适合。CyclicBarrier则侧重于线程的粒度,CyclicBarrier没法比较容易的统计特定方法执行的次数。当然如果一个线程里面就1个方法的话,使用CyclicBarrier和CountDownLatch除了复用上的差别,基本上是一样的。

参考资料:Java concurrency: Countdown latch vs Cyclic barrier