CountDownLatch和CyclicBarrier
CountDownLatch计数器
本质上是通过一个计数器来实现的。计数器的初始值就是线程的数量,每当一个线程执行完毕的时候,计数器的数量就会减1,当计数器的数值为0时,表示所有的线程执行完毕,则会唤醒再countDownLatch上等待的线程。
典型的例子就是主线程等待子线程们全部执行完毕。
CyclicBarrier
栅栏,等待所有的线程都到达屏障时,然后各个线程从而获取锁,释放锁。里面也有一个计数器,每当一个线程到达屏障点的时候都会调用await()方法使自己阻塞,计数器减1,当计数器为0的时候,所有的被await()方法进行阻塞的线程都会被唤醒。
CyclicBarrier可以重复使用,而CountDownLatch不行。