【Java高级】通过CompletableFuture类异步、并行获取数据库数据

本文介绍了Java8中的CompletableFuture类,用于异步任务处理,包括runAsync和supplyAsync方法的区别,以及如何使用allOf方法同步等待多个任务完成。还给出了一个实际应用的例子,展示了如何避免异常处理和保存任务结果。
摘要由CSDN通过智能技术生成

1. CompletableFuture类简介

CompletableFuture 类是 Java 中用于异步编程和处理异步任务的工具类。它是 Java 8 引入的一部分,提供了一种方便的方式来处理异步操作,例如并行执行多个任务、等待多个任务完成等。

CompletableFuture 可以通过 runAsync 或者 supplyAsync 方法异步执行一个任务,使得任务在独立的线程中执行,而不会阻塞主线程。这两方法的区别在于任务是否有返回值

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
    // 异步执行的任务
    baseMapper.selectAll()
});
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步执行的任务,产生一个整数结果
    return 42;
});

使用 CompletableFuture.allOf 方法等待多个 CompletableFuture 全部完成

CompletableFuture<Void> allOfFuture = CompletableFuture.allOf(future1, future2, future3);
allOfFuture.join(); // 阻塞等待所有任务完成

2. CompletableFuture类用法举例

为了避免异常处理的操作,推荐使用runAsync方法,考虑到方法内的任务没有返回值,可以在外部定义一个对象,用来保存任务得到的数据。

① 定义外部对象用来接收任务的输出

List<PowerUsageTopTenUserDTO> topTenSharpPowerList = new ArrayList<>();
List<PowerUsageTopTenUserDTO> topTenPeakPowerList = new ArrayList<>();

② 异步执行任务,调用runAsync方法,使用allOf方法等待多个CompletableFuture全部完成

CompletableFuture<Void> sharpFuture = CompletableFuture.runAsync(() ->
                topTenSharpPowerList.addAll(baseMapper.getTopTenSharpPowerList(businessUnitId, startTime, endTime, powerConsumerIdList)), peakFlatValleyPeriodExecutor);
CompletableFuture<Void> peakFuture = CompletableFuture.runAsync(() ->
                topTenPeakPowerList.addAll(baseMapper.getTopTenPeakPowerList(businessUnitId, startTime, endTime, powerConsumerIdList)), peakFlatValleyPeriodExecutor);
CompletableFuture.allOf(sharpFuture, peakFuture).join();                    

③ 后续对数据继续进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值