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();                    

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐