1. 通常认识
- CountDownLatch是减计数、CyclicBarrier是加计数
- 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除了复用上的差别,基本上是一样的。