假如还有个task3,需要task1和task2,task3都执行完成后进行合并结果
// 创建 task3
CompletableFuture<List<String>> task3 = CompletableFuture.supplyAsync(() -> {
try (SqlSession sqlSession = sqlSessionFactory.openSession(false)) {
long startTime = System.currentTimeMillis();
CbepCbeHeadMapper mapper = sqlSession.getMapper(CbepCbeHeadMapper.class);
List<String> list = mapper.anotherTask(mainId);
long endTime = System.currentTimeMillis();
long runTime = endTime - startTime;
System.out.println("task3程序运行时间(毫秒):" + runTime);
return list;
} catch (Exception e) {
e.printStackTrace();
return new ArrayList<>();
}
}, executorService);
// 合并 task1、task2 和 task3
CompletableFuture<List<String>> combinedFuture = task1.thenCombineAsync(task2, (result1, result2) -> {
List<String> combinedList = new ArrayList<>();
combinedList.addAll(result1);
combinedList.addAll(result2);
return combinedList;
}, executorService)
.thenCombineAsync(task3, (combinedList, result3) -> {
combinedList.addAll(result3);
return combinedList;
}, executorService);
try {
ordernoHeadIdList.addAll(combinedFuture.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// 记得在使用完毕后关闭 executorService
executorService.shutdown();
假如还有个task3,需要task1和task2,task3都执行完成后返回成功
// 创建 task3
CompletableFuture<Void> task3 = CompletableFuture.runAsync(() -> {
try (SqlSession sqlSession = sqlSessionFactory.openSession(false)) {
long startTime = System.currentTimeMillis();
CbepCbeHeadMapper mapper = sqlSession.getMapper(CbepCbeHeadMapper.class);
// 执行 task3 的操作
long endTime = System.currentTimeMillis();
long runTime = endTime - startTime;
System.out.println("task3程序运行时间(毫秒):" + runTime);
} catch (Exception e) {
e.printStackTrace();
}
}, executorService);
// 使用 CompletableFuture.allOf 来等待所有任务完成
CompletableFuture<Void> allTasks = CompletableFuture.allOf(task1, task2, task3);
// 当所有任务都完成后,返回成功的 CompletableFuture
CompletableFuture<Void> successResult = allTasks.thenApplyAsync(voidResult -> {
System.out.println("所有任务都成功完成!");
return null; // 返回一个 Void 结果
}, executorService);
try {
// 等待成功的结果
successResult.get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// 记得在使用完毕后关闭 executorService
executorService.shutdown();