查询接口,发现需要查询大量的sql,导致返回的时间超长,并且有多个循环查找。
可以用多线程方式进行查询
// 创建要调用的实体类或者方法;这个类随自己的逻辑进行修改
public class PayDataStatisticsProcessor implements Runnable{
// 服务类,不需要再注入
private PayDataStatisticsService payDataStatisticsService;
// redis工具,用到就写上
private RedisUtil redisUtil;
// 实体类
private ModelStatis modelStatis ;
// 返回的实体
private List<ModelStatis > resultList;
// 查询条件,封装在实体里
private ModelStatisQuery modelStatisQuery ;
// 金额格式化
private DecimalFormat df = new DecimalFormat("##,##0.00");
// 构造函数 这样就不需要get、set 方法了
public PayDataStatisticsProcessor(PayDataStatisticsService payDataStatisticsService, RedisUtil redisUtil, ModelStatis modelStatis, List<ModelStatis > resultList, ModelStatisQuery modelStatisQuery ) {
this.payDataStatisticsService = payDataStatisticsService;
this.redisUtil = redisUtil;
this.modelStatis = modelStatis;
this.resultList = resultList;
this.modelStatisQuery = modelStatisQuery ;
}
// 重写线程方法
@Override
public void run() {
ModelStatis result = new ModelStatis ();
// 一堆逻辑
// 同步方法;一定要加
synchronized (resultList){
resultList.add(result);
}
}
}
// 调用方式
int numThreads = 6; // 定义线程数
ExecutorService executor = Executors.newFixedThreadPool(numThreads);
for (int i = 0; i < 8; i++) {
PayDataStatisticsProcessor processor = new PayDataStatisticsProcessor(构造方法要传的参数);
executor.execute(processor);
}
// 关闭线程池 记得要关闭
executor.shutdown();
// 线程执行是否完成,没完成继续执行
while (!executor.isTerminated()) {
// 等待所有任务执行完成
Thread.sleep(100);
System.out.println("等待所有线程执行完成,等待时间100ms");
}