项目什么地方使用了多线程
CountDownLatch
(闭锁,倒计时锁)
一般用于线程的同步协作,等待所有线程完成倒计时后才能一起继续执行
构造参数初始化等待计数值
await()等待计数归零
countDown()用来让计数减一
调用await()的线程必须等待其他线程调用countDown()将计数器归零才能继续执行
多线程使用场景一
ES数据的批量导入(数据库数据的批量迁移)
查询总条数,计算总页数,添加CountDownLatch()锁
按页进行批量导入
多线程批量导入,每次导入完成countDownLatch计数器–
导入完成后,进行解锁
多线程使用场景二
微服务长调用(数据汇总)
如果不使用多线程,串行执行所有接口时长相当于所有接口消耗时长之和
使用多线程只需要等待执行最久的接口即可
使用线程池.submit()方法可以拿到一个future类型的返回值
future.get()拿到的就是线程中方法的返回值
多线程使用场景三
异步调用
保证功能的响应速度,把一些不会影响功能的业务进行异步执行(保存,上架等等)
@Async(可选(线程池))