CompletableFuture异步编排


CompletableFuture 是 Java 8 引入的一个用于异步编程的工具类,它提供了一些方便的方法,使得异步编程变得更加容易。通过 CompletableFuture,你可以在异步任务完成时执行一些操作,也可以组合多个异步任务。

以下是一些 CompletableFuture 异步编排的常见操作:

  1. 创建一个CompletableFuture:

    CompletableFuture<String> future = new CompletableFuture<>();
  2. 在 CompletableFuture 上应用转换操作:

    CompletableFuture<String> originalFuture = CompletableFuture.supplyAsync(() -> "Hello");
    
    CompletableFuture<Integer> transformedFuture = originalFuture.thenApply(s -> s.length());

    上述代码中,thenApply 方法在 originalFuture 完成时应用一个函数,将结果从字符串的长度转换为整数。

  3. 组合两个 CompletableFuture 的结果:

    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> " World");
    
    CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (s1, s2) -> s1 + s2);

    thenCombine 方法在两个 CompletableFuture 都完成时应用一个函数,将它们的结果组合起来。

  4. 处理异常情况:

    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
        // Simulate an exception
        throw new RuntimeException("Something went wrong");
    });
    
    CompletableFuture<String> result = future.exceptionally(ex -> "Handled exception: " + ex.getMessage());

    exceptionally 方法用于处理异常情况,返回一个新的 CompletableFuture 对象,其中包含了异常的处理逻辑。

  5. 执行异步任务并处理结果:

    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
        // Perform some asynchronous operation
        System.out.println("Async operation completed");
    });
    
    future.thenRun(() -> System.out.println("Result processing completed"));

    runAsync 方法用于执行异步操作,而 thenRun 方法则在异步操作完成时执行后续的操作。

  6. 等待所有 CompletableFuture 完成:

    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> " World");
    
    CompletableFuture<Void> allOf = CompletableFuture.allOf(future1, future2);
    
    // 阻塞,直到所有 CompletableFuture 完成
    allOf.join();
    
    // 获取结果
    String result1 = future1.get();
    String result2 = future2.get();

    allOf 方法等待所有的 CompletableFuture 完成。需要注意的是,allOf 会返回一个 CompletableFuture<Void>,而不是包含各个结果的 CompletableFuture<List<T>>

这里只是 CompletableFuture 的一些基础用法,实际应用中可以根据具体的场景和需求来进行更复杂的异步编排。


原文链接:codingdict.net