【Java高级】通过CompletableFuture类异步、并行获取数据库数据
通过CompletableFuture类并行执行多个任务、等待多个任务完成
·
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();
③ 后续对数据继续进行处理
更多推荐
已为社区贡献3条内容
所有评论(0)