CountDownLatch 和CyclicBarrier的区别

区别点 CountDownLatch CyclicBarrier
概念 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。  N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。
强调点 重点在那《一个主线程》,他来协调其他N个线程执行完以后,主线程在做点其他的事 重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待。
await等待点 在那《一个主线程》里进行await等待,等待所有的其他线程执行完以后,在做主要的事 在各个子线程内进行await等待,等待其他线程执行完以后,继续执行自己的下面的事
举例

主线程A,需要等待线程B,线程C,线程D全部执行完以后再继续执行主线程A的其他操作(比如更新完成状态)

(比如火箭发射倒计时,等所有步骤线程都全部准备好以后,每个步骤执行完,进行倒计时减1,直到0,火箭发射!)

像摩天轮游戏,只有大家都坐满了座位以后,才启动摩天轮转动。

如果有一个空位,则也不开始游戏,大家会一直等待,直到没有空位。

(也有点像集结号,集结了所有人以后,再去干一件事)

计数器增减

是从最大的数,逐渐减1,直到0。

即,自大而小。

是从0开始累加,直到累加到规定的数,才开始做事。

即,自小而大。

是否可循环使用 不可以循环使用 可以循环使用,到达最大值后,自动归零。

下面是一个例子:https://www.cnblogs.com/xiaorenwu702/p/3977833.html

猜你喜欢

转载自blog.csdn.net/qq_26898645/article/details/89576121