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;
}
posted @ 2023-04-11 20:32  DaleyZou  阅读(17)  评论(0编辑  收藏  举报