当前位置: 首页 > news >正文

springBoot中service层查询使用多线程CompletableFuture(有返回值)

重点:

1. 创建线程池

 Executor executor = Executors.newCachedThreadPool();//保存线程List<CompletableFuture<Void>> futures = new ArrayList<>();

2.使用

//这里可以是多个看下面代码是在for中使用的
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {},executor );

3.等待所有线程执行完毕

  futures.add(future);

4.等待所有线程执行完毕

 CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();

byTimelist方法:

在这个byTimelist方法示例中,我们使用CompletableFuture.supplyAsync()将每个vehicleStatisticsMapper.chuchelist(chuchelistVo)方法调用包装起来,并返回一个CompletableFuture,其中结果的类型为Long。
然后,我们在相应的位置获取异步任务的结果,使用get()方法阻塞当前线程,直到结果可用。
package com.ruoyi.system.service.vehiclestatistics;import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.vo.ChuchelistVo;
import com.ruoyi.system.domain.vo.VehicleStatisticsVo;
import com.ruoyi.system.mapper.vehiclestatistics.VehicleStatisticsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;@Service
public class VehicleStatisticsServiceimpl implements VehicleStatisticsService {@AutowiredVehicleStatisticsMapper vehicleStatisticsMapper;@Overridepublic List<VehicleStatisticsVo> byTimelist(String startTime, String endTime) {List<VehicleStatisticsVo> vehicleStatisticsVos = vehicleStatisticsMapper.byTimelist(startTime, endTime);List<CompletableFuture<Void>> futures = new ArrayList<>();/*** 使用线程池的工厂方法创建线程池(会自动设置线程的数量大小)*/Executor executor = Executors.newCachedThreadPool();for (VehicleStatisticsVo vehicleStatisticsVo : vehicleStatisticsVos) {CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {ChuchelistVo chuchelistVo = new ChuchelistVo();chuchelistVo.setStartTime(startTime);chuchelistVo.setEndTime(endTime);chuchelistVo.setDeptid(Long.valueOf(vehicleStatisticsVo.getBmId()));chuchelistVo.setChsingletype("值班");CompletableFuture<Long> zhibanFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size(),executor);chuchelistVo.setChsingletype("紧急");CompletableFuture<Long> jjChucheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size(),executor);chuchelistVo.setChsingletype("正常");CompletableFuture<Long> chuCheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size(),executor);ChuchelistVo chuchelistVo2 = new ChuchelistVo();chuchelistVo2.setStartTime(startTime);chuchelistVo2.setEndTime(endTime);chuchelistVo2.setLongAndShortparame("and cc.sempid=0");chuchelistVo2.setDeptid(Long.valueOf(vehicleStatisticsVo.getBmId()));CompletableFuture<Long> dtChucheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist2(chuchelistVo2).size(),executor);chuchelistVo2.setLongAndShortparame("and cc.sempid!=0");CompletableFuture<Long> ctChucheFuture = CompletableFuture.supplyAsync(() ->(long) vehicleStatisticsMapper.chuchelist2(chuchelistVo2).size(),executor);try {vehicleStatisticsVo.setZhiban(zhibanFuture.get());vehicleStatisticsVo.setJjChuche(jjChucheFuture.get());vehicleStatisticsVo.setChuChe(chuCheFuture.get());vehicleStatisticsVo.setDtChuche(dtChucheFuture.get());vehicleStatisticsVo.setCtChuche(ctChucheFuture.get());} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}},executor);futures.add(future);}CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();return vehicleStatisticsVos;}@Overridepublic AjaxResult bytypelist(ChuchelistVo chuchelistVo1) {Map<String, Object> ms = new HashMap<>();Map<String, Object> rs = new HashMap<>();Map<String, Object> rs2 = new HashMap<>();ChuchelistVo chuchelistVo = new ChuchelistVo();chuchelistVo.setStartTime(chuchelistVo1.getStartTime());chuchelistVo.setEndTime(chuchelistVo1.getEndTime());chuchelistVo.setChsingletype(chuchelistVo1.getChsingletype());for (Long deptid : chuchelistVo1.getDeptids()) {chuchelistVo.setDeptid(deptid);rs2.put("部门id", deptid);rs2.put("部门名称", vehicleStatisticsMapper.chuchelist(chuchelistVo).size() > 0 ? vehicleStatisticsMapper.chuchelist(chuchelistVo).get(0).getDeptname() : ("" + deptid));rs2.put("listsize", (long) vehicleStatisticsMapper.chuchelist(chuchelistVo).size());rs2.put("list",vehicleStatisticsMapper.chuchelist(chuchelistVo));rs.put(vehicleStatisticsMapper.chuchelist(chuchelistVo).size() > 0 ? vehicleStatisticsMapper.chuchelist(chuchelistVo).get(0).getDeptname() : ("" + deptid),rs2);}ms.put("result", rs);ms.put("startTime", chuchelistVo.getStartTime());ms.put("endTime", chuchelistVo.getEndTime());return AjaxResult.success(ms);}@Overridepublic AjaxResult bylongandshortparamelist(ChuchelistVo chuchelistVo1) {Map<String, Object> ms = new HashMap<>();Map<String, Object> rs = new HashMap<>();Map<String, Object> rs2 = new HashMap<>();ChuchelistVo chuchelistVo = new ChuchelistVo();chuchelistVo.setStartTime(chuchelistVo1.getStartTime());chuchelistVo.setEndTime(chuchelistVo1.getEndTime());if (chuchelistVo1.getLongAndShortparame() != null) {if ("长途".equals(chuchelistVo1.getLongAndShortparame())) {chuchelistVo.setLongAndShortparame("and cc.sempid=0");}if ("短途".equals(chuchelistVo1.getLongAndShortparame())) {chuchelistVo.setLongAndShortparame("and cc.sempid!=0");}}for (Long deptid : chuchelistVo1.getDeptids()) {chuchelistVo.setDeptid(deptid);List<ChuchelistVo> chuchelistVos = vehicleStatisticsMapper.chuchelist2(chuchelistVo);rs2.put(chuchelistVos.size() > 0 ? chuchelistVos.get(0).getDeptname() : ("" + deptid), (long) chuchelistVos.size());rs2.put("部门id", deptid);rs2.put("部门名称", chuchelistVos.size() > 0 ? chuchelistVos.get(0).getDeptname() : ("" + deptid));rs2.put("listsize", chuchelistVos.size());rs2.put("list", chuchelistVos);rs.put(chuchelistVos.size() > 0 ? chuchelistVos.get(0).getDeptname() : ("" + deptid), rs2);}ms.put("result", rs);ms.put("startTime", chuchelistVo.getStartTime());ms.put("endTime", chuchelistVo.getEndTime());return AjaxResult.success(ms);}}
http://www.lryc.cn/news/125831.html

相关文章:

  • 畜牧虚拟仿真 | 鱼授精过程VR模拟演练系统
  • 第一百一十四回 局部动态列表
  • 多尺度目标检测【动手学深度学习】
  • elasticsearch 基础
  • 【BUG】docker安装nacos,浏览器却无法访问到页面
  • C#引用Web Service 类型方法,添加搜索本地服务器Web Service 接口调用方法
  • yolov8训练进阶:新增配置参数
  • 轻量级自动化测试框架WebZ
  • 如何实现安全上网
  • Redis心跳检测
  • 【数据库】Sql Server可视化工具SSMS条件和SQL窗格以及版本信息
  • Python SFTP 详细使用
  • MyBatis的XML映射文件
  • UML-类图和对象图
  • 升级指定版本Node.js或npm
  • UE4/5 GAS技能系统入门3 - GameplayEffect
  • Linux交叉编译opencv并移植ARM端
  • TypeScript教程(一)简介与安装
  • 做视频_Style
  • vue3使用pinia和pinia-plugin-persist做持久化存储
  • 数据结构入门指南:二叉树
  • 大数据课程J2——Scala的基础语法和函数
  • 03-基础入门-搭建安全拓展
  • 穿越未来:探索虚拟现实科技的未来前景
  • SQL- 每日一题【1327. 列出指定时间段内所有的下单产品】
  • [xgb] plot tree
  • 【云原生】Kubernetes 概述
  • 9.2.2Socket(TCP)
  • “解锁IDEA的潜力:高级Java Maven项目配置指南”
  • [足式机器人]Part5 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】