当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/373820.html

相关文章:

  • 基于springboot的宠物商城网站
  • DM存储ontap系统修改管理IP
  • Web前端商业素材:挖掘价值,释放创意的无限可能
  • LeetCode206-反转链表
  • 5000天后的世界
  • Photoshop中颜色与色调的调整
  • 【退役之重学Java】终结篇,暂别 Java !
  • 查找——顺序查找和折半查找
  • Bio-Info每日一题:Rosalind-07-Mendel‘s First Law(孟德尔第一定律 python实现)
  • C++ 47 之 函数调用运算符重载
  • [Qt的学习日常]--常用控件1
  • 模型实战(23)之 yolov10 使用总结及训练自己的数据集
  • AIRNet模型使用与代码分析(All-In-One Image Restoration Network)
  • 欧洲杯“球迷狂欢趴”开启,容声带来“健康养鲜”新理念
  • 人工智能对零售业的影响
  • Spring Boot + EasyExcel + SqlServer 进行批量处理数据
  • 深入理解指针(四)
  • k-means聚类模型的优缺点
  • 我的创作纪念日(1825天)
  • Studio One 6.6.2 for Mac怎么激活,有Studio One 6激活码吗?
  • Windows搭建nacos集群
  • kotlin 中的字符
  • yocto根文件系统如何配置静态IP地址
  • 【博客720】时序数据库基石:LSM Tree的辅助优化
  • C++前期概念(重)
  • Java字符串加密HMAC-SHA1密钥,转换成Base64编码
  • 【网络架构】Nginx
  • C# OpenCvSharp 逻辑运算-bitwise_and、bitwise_or、bitwise_not、bitwise_xor
  • JVM常用概念之扁平化堆容器
  • python面试题5:浅拷贝和深拷贝之间有什么区别?(难度--中等)