java多线程-CompletableFuture

本文介绍了如何在Java中使用CompletableFutureAPI异步执行任务task1,task2和task3,并在它们全部完成后进行结果合并,展示了并发编程中的任务调度和结果处理。
摘要由CSDN通过智能技术生成

 假如还有个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();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值