以下是使用java 多线程查询数据 ,然后汇总返回的样例和实际使用方法
样例
@GetMapping("getstocktop3info")
public Result getstocktop3info(
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate
) throws ParseException {
//如果定义一个ArrayList
//需要加上Collections.synchronizedList()保证线程安全,防止溢出
//List<TestVo> resultList=Collections.synchronizedList(new ArrayList<>());
List<Map> top3Map = erpStockService.getstocktopmanyinfo(3);
//定义线程数量
CountDownLatch ctl = new CountDownLatch(3);
for (Map top : top3Map) {
//新建线程
new Thread(()->{
//代码块
//线程结束表结束一个线程
ctl.countDown();
System.out.println("线程执行");
}).start();
}
System.out.println("最后结束");
//等待所有线程结束返回最终数据
try {
ctl.await();
}catch (InterruptedException e){
e.printStackTrace();
}
return Result.OK(top3Map);
}
实际使用方法
@ApiOperation(value = "获取库存前三的车辆", notes = "获取库存前三的车辆")
@GetMapping("getstocktop3info")
public Result getstocktop3info(
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate
) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
Integer startT = null;
Integer endT = null;
String startDateTime = null;
String endDateTime = null;
if (startDate != null && endDate != null) {
Date startTime = DateUtils.strToDate2(startDate);
Date endTime = DateUtils.strToDate2(endDate);
startT = Integer.parseInt(sdf.format(startTime));
endT = Integer.parseInt(sdf.format(endTime));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat daydf = new SimpleDateFormat("yyyy-MM-dd");
startDateTime = df.format(daydf.parse(startDate));
endDateTime = df.format(daydf.parse(endDate));
}
List<Map> top3Map = erpStockService.getstocktopmanyinfo(3);
CountDownLatch ctl = new CountDownLatch(3);
for (Map top : top3Map) {
//获取这个车系的上险量的城市饼状图
List<Map> insuranceNumber = ycUpperService.getpurchaseInsuranceNumber((Integer) top.get("series_id"), startT, endT);
Map deleteMap=null;
for (Map inNumber:insuranceNumber){
if (inNumber.get("name")==null){
top.put("specc",inNumber.get("number"));
deleteMap=inNumber;
}
}
if (deleteMap!=null){
insuranceNumber.remove(deleteMap);
}
insuranceNumber = insuranceNumber.size() < 1 ? null : classifyOthers(insuranceNumber);
//赋值上线量总数
top.put("insuranceNumber", insuranceNumber);
String finalStartDateTime = startDateTime;
String finalEndDateTime = endDateTime;
new Thread(()->{
//获取这个车型的成交城市排名
List<Map> buyNumber = nKoubeiService.getseriesTradingCityTop((Integer) top.get("series_id"), 3, finalStartDateTime, finalEndDateTime);
top.put("buyNumber", buyNumber);
ctl.countDown();
System.out.println("线程执行");
}).start();
// //获取这个车型的成交城市排名
// List<Map> buyNumber = nKoubeiService.getseriesTradingCityTop((Integer) top.get("series_id"), 3, startDateTime, endDateTime);
// top.put("buyNumber", buyNumber);
}
System.out.println("最后结束");
//等待所有线程结束返回最终数据
try {
ctl.await();
}catch (InterruptedException e){
e.printStackTrace();
}
return Result.OK(top3Map);
}