区别点 | CountDownLatch | CyclicBarrier |
概念 | 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。 | N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。 |
强调点 | 重点在那《一个主线程》,他来协调其他N个线程执行完以后,主线程在做点其他的事 | 重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待。 |
await等待点 | 在那《一个主线程》里进行await等待,等待所有的其他线程执行完以后,在做主要的事 | 在各个子线程内进行await等待,等待其他线程执行完以后,继续执行自己的下面的事 |
举例 | 主线程A,需要等待线程B,线程C,线程D全部执行完以后再继续执行主线程A的其他操作(比如更新完成状态) (比如火箭发射倒计时,等所有步骤线程都全部准备好以后,每个步骤执行完,进行倒计时减1,直到0,火箭发射!) | 像摩天轮游戏,只有大家都坐满了座位以后,才启动摩天轮转动。 如果有一个空位,则也不开始游戏,大家会一直等待,直到没有空位。 (也有点像集结号,集结了所有人以后,再去干一件事) |
计数器增减 | 是从最大的数,逐渐减1,直到0。 即,自大而小。 | 是从0开始累加,直到累加到规定的数,才开始做事。 即,自小而大。 |
是否可循环使用 | 不可以循环使用 | 可以循环使用,到达最大值后,自动归零。 |
CountDownLatch 和CyclicBarrier的区别
最新推荐文章于 2024-08-01 15:33:26 发布