java8 CompletableFuture.supplyAsync +线程池 实现多线程处理

public void dealGovernanceStrategyNew(List<StrategyStreamOperation> commonAll, StrategyDetail strategyDetail, List<String> instanceList) {
        if (Objects.isNull(strategyDetail.getType()) && Objects.isNull(strategyDetail.getRetainNum())) {
                // 500一组分批处理
                List<List<String>> lists = ListSplitUtil.splitList(instanceList, 500);
                // 对于集合写操作:synchronizedList 相对于Vector 、CopyOnWriteArrayList性能更佳。 读操作建议CopyOnWriteArrayList
                // 多线程批量处理数据(500一组) 这里使用java8 CompletableFuture.supplyAsync实现多线程处理
                List<StrategyStreamOperation> operationList = Collections.synchronizedList(new ArrayList<>());
                // 手动创建线程池
                ExecutorService executorService =  new ThreadPoolExecutor(lists.size(), lists.size(), 0, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>(1024), new ThreadPoolExecutor.AbortPolicy());
                lists.stream().forEach((List<String> item) ->{
                        CompletableFuture<List<StrategyStreamOperation>> cf = CompletableFuture.supplyAsync(()->{
                                // 持续天数的峰值判断的
                                List<StrategyStreamOperation> futureList = getStrategyByCommon();
                                return futureList;
                        }, executorService);
                        try {
                                // 获取线程执行结果
                                operationList.addAll(cf.get());
                        } catch (InterruptedException e) {
                                log.error("从线程中获取执行结果失败", e);
                        } catch (ExecutionException e) {
                                log.error("从线程中获取执行结果失败", e);
                        }
                });
                // 关闭线程池,不再接收新任务
                executorService.shutdown();
                commonAll.addAll(operationList);
        }
}