- 类似场景
- main进程中启动子线程,等待子线程执行完成后,main再执行
 - 可以使用 
join() 
 join()的执行原理- 分清两个线程,调用join的线程和当前执行线程。
 - 当前执行线程 当join的线程处于存活状态会一致 wait(0)
 - join的线程在执行完毕后,会调用
notifyAll()方法是JVM中实现的。 
总结
- 当CoutDownLatch指定的数量被消耗完后,调用await()的线程才会向下执行
 - 不可重复使用
 
同步屏障CyclicBarrier
new CyclicBarrier(int arg):当arg个线程都调用了CyclicBarrier的await()后,所有线程才往下执行new CyclicBarrier(int arg, Runnable r):当arg个线程都调用了CyclicBarrier的await()后,先执行 r任务,所有线程继续往下执行- 若在聚集线程过程中的某个线程被中断,所有等待和将要等待的线程都报
BrokenBarrierException - 每次使用完本次聚集后,可以重复使用
 - 场景介绍:一个Excel有4个sheet记录的时今年全部资金流水。需要统计每个sheet的总计。然后汇总。计算日均收入。、
- 与CountDownLatch不同
 
 - CyclicBarrier可以重复使用
 - CyclicBarrier是所有线程到某个点后,再同时进行,CountDown只控制一个线程
 


Barrier                                    CountDownLatch
