• CompletableFuture方法介绍及代码示例


    CompletableFuture 是 Java 8 引入的一个类,用于支持异步编程。它实现了 Future 接口,并提供了非常强大的功能来处理异步操作。下面是 CompletableFuture 的一些关键内部方法及其详细解释。

     基础方法

    1. supplyAsync 和 runAsync:

             - supplyAsync(Supplier supplier):异步执行一个任务,并返回一个包含任务结果的 CompletableFuture。Supplier 是一个可以返回结果的函数接口。
       - runAsync(Runnable runnable):异步执行一个任务,不返回结果,返回一个 CompletableFuture

    2. thenApply 和 thenAccept:

            - thenApply(Function fn):当 CompletableFuture 计算完成后,应用一个函数到结果上,并返回一个新的 CompletableFuture。
       - thenAccept(Consumer action):当 CompletableFuture 计算完成后,执行一个操作并消费结果,但不返回新的 CompletableFuture。

    3. thenRun:

             - thenRun(Runnable action):当 CompletableFuture 计算完成后,运行一个 Runnable,但不使用 CompletableFuture 的结果,也不返回新的 CompletableFuture。

     组合方法

    4. thenCombine 和 thenCompose:

            - thenCombine(CompletionStage other, BiFunction fn):当两个 CompletableFuture 都完成后,应用一个函数到两个结果上,并返回一个新的 CompletableFuture。
       - thenCompose(Function> fn):当第一个 CompletableFuture 完成后,应用一个函数到结果上,返回一个新的 CompletableFuture。

    5. allOf 和 anyOf:

             - allOf(CompletableFuture... cfs):返回一个新的 CompletableFuture,当所有给定的 CompletableFuture 完成后,它也完成。
       - anyOf(CompletableFuture... cfs):返回一个新的 CompletableFuture,当任意一个给定的 CompletableFuture 完成后,它也完成。

     异常处理方法

    6. handle 和 exceptionally:

            - handle(BiFunction fn):当 CompletableFuture 完成时,无论是正常还是异常完成,应用一个处理函数到结果或异常上,并返回一个新的 CompletableFuture。
       - exceptionally(Function fn):当 CompletableFuture 异常完成时,应用一个函数到异常上,返回一个新的 CompletableFuture。

     实例详解

    下面是一个使用 CompletableFuture 的实例代码:

    1. import java.util.concurrent.CompletableFuture;
    2. import java.util.concurrent.ExecutionException;
    3. public class CompletableFutureExample {
    4.     public static void main(String[] args) throws InterruptedException, ExecutionException {
    5.         // 使用 supplyAsync 创建一个异步任务
    6.         CompletableFuture future = CompletableFuture.supplyAsync(() -> {
    7.             try {
    8.                 Thread.sleep(2000);
    9.             } catch (InterruptedException e) {
    10.                 e.printStackTrace();
    11.             }
    12.             return "Hello";
    13.         });
    14.         // thenApply 在前一个任务完成后应用一个函数
    15.         CompletableFuture resultFuture = future.thenApply(result -> result + " World");
    16.         // get() 方法阻塞,直到计算完成
    17.         String result = resultFuture.get();
    18.         System.out.println(result); // 输出 "Hello World"
    19.     }
    20. }


     解释

    1. 创建异步任务:

    1.    java
    2.    CompletableFuture future = CompletableFuture.supplyAsync(() -> {
    3.        try {
    4.            Thread.sleep(2000);
    5.        } catch (InterruptedException e) {
    6.            e.printStackTrace();
    7.        }
    8.        return "Hello";
    9.    });

    这段代码创建了一个异步任务,经过 2 秒钟后返回字符串 "Hello"。

    2. 应用函数:

    CompletableFuture resultFuture = future.thenApply(result -> result + " World");

            当第一个 CompletableFuture 完成后,thenApply 方法应用一个函数,将结果 "Hello" 变为 "Hello World"。

    3. 获取结果:

    String result = resultFuture.get();


       get() 方法阻塞当前线程,直到 CompletableFuture 计算完成,并返回结果 "Hello World"。

    CompletableFuture 提供了丰富的方法来处理异步编程的各种场景。它们的组合和使用可以使得异步代码更加简洁和易于理解。

  • 相关阅读:
    Linux:使用ssl加密网站为https
    你有被代理过吗?讲讲开源框架都在用的代理模式
    AOP
    10月26日,起立&LG新品首发第五代OLED透明显示屏
    外贸客户来源的渠道有哪些?
    Github创建个人博客
    Velox Types介绍和源码解析
    Kafka如何处理消费者之间的消息偏斜和负载均衡问题
    语音前处理技术在会议场景中的应用及挑战
    java.awt.HeadlessException
  • 原文地址:https://blog.csdn.net/m0_66572126/article/details/139719164