• 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 提供了丰富的方法来处理异步编程的各种场景。它们的组合和使用可以使得异步代码更加简洁和易于理解。

  • 相关阅读:
    [C++ 网络协议] 套接字和标准I/O
    Mybatis-注解开发
    服用5年份筑基丹 - React篇
    HDU 1009 FatMouse‘ Trade (贪心算法)
    Java多线程/spring boot多线程
    檢測項目簡體字
    Python学习笔记--类的定义和调用
    7.1-安全保护等级 7.2-安全防护体系 7.3-数据安全策略 7.4-安全防护策略
    数据集笔记:Beijing-BRT-dataset
    【蓝桥杯选拔赛真题46】Scratch磁铁游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
  • 原文地址:https://blog.csdn.net/m0_66572126/article/details/139719164