java使用多线程
代码
public List<OutboundStationStatis> queryStationStatisticsByTime(Long startTime, Long endTime, List<String> stationCodes) {
// 当前任务不支持 count sum 等查询,本次使用查询所有数据内存聚合
// 我们循环查询数据, 分页搞
// 根据工作站去循环查 or 循环查所有的数据自己按照工作站分组 (大翻页对数据库查询不友好,还是按照工作站查询减少大翻页的可能)
List<OutboundStationStatis> results = new CopyOnWriteArrayList<>();
CompletableFuture[] cfs = stationCodes.stream().map(stationCode -> CompletableFuture.supplyAsync(() -> getOutboundStationStatis(startTime, endTime, stationCode), outboundQueryStationStatisticsByTimeExecutor)
.whenComplete((v, e) -> {
if (v != null){
results.add(v);
}
})
.exceptionally(throwable -> {
log.error("queryStationStatisticsByTime outboundQueryStationStatisticsByTimeExecutor eror", throwable);
return null;
})).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs).join();
return results;
}