非常有用的并发控制-倒计时器CountDownLatch

简介: CountDownLatch见名思义,即倒计时器,是多线程并发控制中非常有用的工具类,它可以控制线程等待,直到倒计时器归0再继续执行。给你出个题,控制5个线程执行完后主线徎再往下执行,并统计5个线程的所耗时间。

CountDownLatch见名思义,即倒计时器,是多线程并发控制中非常有用的工具类,它可以控制线程等待,直到倒计时器归0再继续执行。

给你出个题,控制5个线程执行完后主线徎再往下执行,并统计5个线程的所耗时间。当然我们可以通过join的形式完成这道题,但如果我说统计100个1000个线程呢?难道要写1000个join等待吗?这显然是不现实的。

废话少说,我们来做一个例子看看上面的题怎么实现,并理解倒计时器。

首先通过new CountDownLatch(5)约定了倒计时器的数量,在这里也是线程的数量,每个线程执行完后再对倒计时器-1。countDown()方法即是对倒计时器-1,这个方法需要放在finally中,一定要保证在每个线程中得到释放,不然子线程如果因为某种原因报错倒计时器永远不会清0,则会导报主线程会一直等待。

await()方法即是主线程阻塞等待倒计器归0后再继续往下执行,当然await可以带时间进去,等待多久时间后不管倒计时器有没有归0主线程继续往下执行。

如上面的例子所示,我们输出了倒计时器最后的数字0,表示倒计时器归0了,也输出了从开始到结束所花费的时间。从这个例子可以完全理解倒计时器的含义,这个工具类在实际开发经常有用到,也很好用。

大家有什么疑问的也可以下面留言,所有文章所示代码资源扫下面的群文件下载。

相关文章
|
2月前
|
Java
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
本文介绍了拼多多面试中的模拟拼团问题,通过使用 `CyclicBarrier` 实现了多人拼团成功后提交订单并支付的功能。与之前的 `CountDownLatch` 方法不同,`CyclicBarrier` 能够确保所有线程到达屏障点后继续执行,并且屏障可重复使用。文章详细解析了 `CyclicBarrier` 的核心原理及使用方法,并通过代码示例展示了其工作流程。最后,文章还提供了 `CyclicBarrier` 的源码分析,帮助读者深入理解其实现机制。
【多线程面试题十二】、阻塞线程的方式有哪些?
线程阻塞的方式包括调用sleep()方法、阻塞式IO操作、等待同步监视器的获取、等待通知(notify),以及慎用的suspend()方法。
|
6月前
|
Java 数据库连接 mybatis
CountDownLatch(倒计时器)源码解读与使用
CountDownLatch(倒计时器)源码解读与使用
|
Java 开发工具 git
【Java多线程】如何正确使用倒计时协调器:CountDownLatch
CountDownLatch可以用来实现一个或者多个(注意可以有多个)线程,等待其他线程完全一组特定的操作后,才开始继续执行的操作,这些特定的操作被称作先决条件。
218 2
|
数据库
【并发技术15】线程同步工具CyclicBarrier的使用
【并发技术15】线程同步工具CyclicBarrier的使用
深入理解JUC:第四章:CountDownLatch倒计时器
深入理解JUC:第四章:CountDownLatch倒计时器
深入理解JUC:第四章:CountDownLatch倒计时器
深入理解JUC:第五章:CyclicBarrier循环栅栏
深入理解JUC:第五章:CyclicBarrier循环栅栏
112 0
深入理解JUC:第五章:CyclicBarrier循环栅栏
【线程】并发流程控制的同步工具-CountDownLatch
通常我们都会利用并行来优化性能,但是对于串行化的业务,可能需要按顺序执行,那我们怎么才能处理呢?
|
Java 调度
java并发原理实战(2)--线程的状态和切换
java并发原理实战(2)--线程的状态和切换
java并发原理实战(2)--线程的状态和切换
|
安全 Java 调度
Java多线程(4)--线程的同步解决线程安全问题
Java多线程(4)--线程的同步解决线程安全问题
105 0