CountDownLatch:
CountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或 多个线程一直等待,直到其他线程的操作执行完后再执行,CountDownLatch是通过一个计数 器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值 就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线 程就可以恢复执行任务。
CyclicBarrier:
CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是, 让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障 才会开门,所有被屏障拦截的线程才会继续干活。这个屏障之所以用循环修饰,是因为在所有 的线程释放彼此之后,这个屏障是可以重新使用的(reset()方法重置屏障点),这一点与 CountDownLatch 不同。
两者区别:
1、 CountDownLatch简单的说就是一个线程等待,直到他所等待的其他线程都执行完成并且 调用countDown()方法发出通知后,当前线程才可以继续执行。
2、 CyclicBarrier是所有线程都进行等待,直到所有线程都准备好进入await()方法之后, 所有线程同时开始执行!
3、 CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset()方 法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置 计数器,并让线程们重新执行一次。
4、 CyclicBarrier还提供其他有用的方法,比女口 getNumberWaiting方法可以获得 CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的线程是否被中断。如果被中断 返回true,否则返回false。
Was this helpful?
0 / 0