CountDownLatch的使用技巧

在使用了多线程处理任务后,最常见的需要就是主线程并不知道任务的完成情况,因此无法决定是继续往下进行还是继续完毕。CountDownLatch是JDK提供给我们的多线程间通信的一个工具,用于让主线程知道任务完成的进度。可以使主线程等待其他线程池内线程执行完毕后再执行。

举个例子来说:

目前一名老师接到了一个任务,说要把教室里的桌子都擦干净

流程是:

把桌子擦干净
等全部桌子干净了之后,去敲上课铃。
如果不用多线程做的话,教室里有1000张桌子,老师(主线程)要逐一把桌子擦干净,然后去敲上课铃。效率比较低,于是老师叫来了50个同学(50个线程),告诉他们要擦桌子。但是问题是老师无法检查每张桌子是否都擦了,所以不知道什么时候去敲上课铃,于是约定同学擦完一张桌子就要举手报告老师一次,老师只需要记录同学的举手次数,等到同学的举手次数到了1000次,老师去敲上课铃。而这个CountDownLatch其实就是这个计数器

一下是一个简单案例
在这里插入图片描述
用newFixedThreadPool创建一个固定大小1的线程池,CountDownLatch类中放了page个子线程放进线程池中执行,
cdl.await方法用于在线程池中page个线程执行完毕后通知主线程告诉其可以执行了

在定义一个线程中执行完毕后 要加上latch.countDown()方法在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值