- #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 时,之前等待的线程便会继续运行。