CountDownLatch


  • #task countdownlauch ✅ 2023-11-24

主要方法

CountDownLatch 的几个主要方法

(1)构造函数:public CountDownLatch(int count) { };
它的构造函数是传入一个参数,该参数 count 是需要倒数的数值。

**(2)await()**:调用 await() 方法的线程开始等待,直到倒数结束,也就是 count 值为 0 的时候才会继续执行。

**(3)await(long timeout, TimeUnit unit)**:传入超时参数,这里可以设置超时时间,如果超时就不再等待了。

**(4)countDown()**:把数值倒数 1,也就是将 count 值减 1,直到减为 0 时,之前等待的线程会被唤起。

应用场景

主要有如下两种:一等多、多等一

一个线程等待多个线程执行完毕

比如一个裁判员和多个跑步运动员,裁判员必须在所有运动员都完成比赛才能吹哨比赛结束。就可以通过 CountDownLatch 设置计数器(应该设置为 5,因为要等 5 个线程结束),让”裁判员”最后执行吹哨。

翻译过来就是:多个线程执行完毕,这个线程才能执行

示例代码如下:一个裁判、五个运动员。

多个线程必须等待一个线程执行完才能继续执行

换个场景,多个运动员必须等待裁判开枪才能起跑

CountDownLatch 设置计数器(应该设置为 1,因为要等 1 个线程结束)

那就是让每个运动员线程执行 await 方法等待, 直到”裁判”开枪(调用 countDown ), 使计数器为 0,才能让运动员开始跑。

示例代码:

总结

总之:CountDownLatch 类在创建实例的时候,需要在构造函数中传入倒数次数,然后由需要等待的线程去调用 await 方法开始等待,而每一次其他线程调用了 countDown 方法之后,计数便会减 1,直到减为 0 时,之前等待的线程便会继续运行。


文章作者: KTpro
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KTpro !
  目录