CompletableFuture实现异步获取结果并且等待所有异步任务完成

本文介绍了如何利用CompletableFuture在Java中实现异步操作,并等待所有任务执行完毕。通过代码示例展示了具体的应用场景。

对于的使用可以参照这篇文章:使用Future实现异步回调的方式_大军001的博客-优快云博客

下面主要用代码的方式描述下通过CompletableFuture实现异步获取结果并且等待所有异步任务完成:

/**
 * CompletableFuture的AllOf功能测试,等待所有任务执行完
 * 
 */
public class CompletableFutureAllOfTest {
    
    public static void main(String[] args) throws Exception {
        ExecutorService executor = ExecutorServiceSupport.newTheadPool("completableFuture_allOf_test");
        method1(executor);
        method2(executor);
        method3(executor);
    }
    
    /**
     * 拆解写法
     * @param executor
     */
    public static void method1 (ExecutorService executor) {
        long start = System.currentTimeMillis();
        // 定义第一个任务
        CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(3000);
            } catch (Exception e) {
      
在 Java 中,使用 CompletableFuture 异步执行多个任务,在所有任务执行完毕后获取结果并处理,可以借助 `CompletableFuture.allOf()` 方法。`CompletableFuture.allOf()` 方法会等待其中的每个异步任务都结束,配合 `join()` 方法能实现阻塞效果,以确保所有任务完成后再继续后续操作 [^2]。 以下是一个示例代码: ```java import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; public class CompletableFutureExample { public static void main(String[] args) throws ExecutionException, InterruptedException { // 创建多个异步任务 CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return "Result of Task 1"; }); CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } return "Result of Task 2"; }); CompletableFuture<String> task3 = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "Result of Task 3"; }); // 使用 allOf 方法等待所有任务完成 CompletableFuture<Void> allFutures = CompletableFuture.allOf(task1, task2, task3); // 等待所有任务完成 allFutures.join(); // 获取每个任务结果 String result1 = task1.get(); String result2 = task2.get(); String result3 = task3.get(); // 处理结果 System.out.println(result1); System.out.println(result2); System.out.println(result3); } } ``` 在上述代码中,首先创建了三个异步任务 `task1`、`task2` 和 `task3`,每个任务模拟了不同的耗时操作。然后使用 `CompletableFuture.allOf()` 方法将这三个任务组合起来,调用 `join()` 方法阻塞当前线程,直到所有任务完成。最后通过 `get()` 方法获取每个任务结果并进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值