您的位置:首页 > 新闻 > 资讯 > CompletableFuture方法介绍及代码示例

CompletableFuture方法介绍及代码示例

2025/6/4 11:06:42 来源:https://blog.csdn.net/m0_66572126/article/details/139719164  浏览:    关键词:CompletableFuture方法介绍及代码示例

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

 基础方法

1. supplyAsync 和 runAsync:

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

2. thenApply 和 thenAccept:

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

3. thenRun:

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

 组合方法

4. thenCombine 和 thenCompose:

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

5. allOf 和 anyOf:

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

 异常处理方法

6. handle 和 exceptionally:

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

 实例详解

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

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;public class CompletableFutureExample {public static void main(String[] args) throws InterruptedException, ExecutionException {// 使用 supplyAsync 创建一个异步任务CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "Hello";});// thenApply 在前一个任务完成后应用一个函数CompletableFuture<String> resultFuture = future.thenApply(result -> result + " World");// get() 方法阻塞,直到计算完成String result = resultFuture.get();System.out.println(result); // 输出 "Hello World"}
}


 解释

1. 创建异步任务:

   javaCompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "Hello";});

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

2. 应用函数:

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

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

3. 获取结果:

String result = resultFuture.get();


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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com