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

CompletableFuture浅谈

一、Future 的局限性

  • 获取结果只能阻塞式get(),线程阻塞,不能异步处理结果,也不能注册回调。
  • 不支持链式调用,想要多个异步任务串联,需要手动管理多个 Future 对象,代码非常冗长
  • 不支持组合多个异步任务,比如等待多个任务完成后再继续执行,或两个任务中任意一个完成就继续执行,需要手动写状态检查逻辑。
  • 不支持异常处理链,如果一个异步任务中抛出异常,需要 try-catch 包裹,无法像函数式编程一样优雅地处理异常链。

二、CompletableFuture的API概述

1、异步任务创建‌。

supplyAsync(Supplier):创建带返回值的异步任务,默认使用ForkJoinPool线程池。‌‌
runAsync(Runnable):创建无返回值的异步任务,常用于执行副作用操作。‌‌
两种方法均可通过传入Executor参数指定自定义线程池。‌‌

2、结果处理与链式调用‌

thenApply(Function):对结果进行同步转换(如字符串拼接)。‌‌‌‌
thenAccept(Consumer):消费结果但不返回新值(如打印)。‌‌
thenRun(Runnable):结果无关的后置操作(如清理资源)。‌‌
以上方法均提供Async后缀版本(如thenApplyAsync),支持异步执行。‌‌

3、组合操作‌

thenCompose(Function):串联两个依赖的异步任务(前序结果作为后序输入)。‌‌
thenCombine(CompletableFuture, BiFunction):合并两个独立任务的结果。‌‌
applyToEither(CompletableFuture, BiFunction):当有一个任务正常完成时,就会进行下阶段任务
allOf(CompletableFuture…):等待所有任务完成。‌‌
anyOf(CompletableFuture…):等待任一任务完成。‌‌

4、异常处理‌。

exceptionally(Function):捕获异常并返回替代值。‌‌‌‌
handle(BiFunction):同时处理正常结果和异常。‌‌

5、获取CompletableFuture执行异步的返回

join():抛出抛出未经检查的异常CompletionException,不支持超时参数(推荐)
get():抛出经检查的异常InterruptedException和ExecutionException,需要在调用处捕获它们。支持超时参数

三、例子

1、supplyAsync

在这里插入图片描述

2、thenCompose

在这里插入图片描述

3、thenCombine

在这里插入图片描述

4、applyToEither

在这里插入图片描述

5、thenApply

在这里插入图片描述

6、exceptionally

在这里插入图片描述
在这里插入图片描述

7、handle

在这里插入图片描述

http://www.xdnf.cn/news/13317.html

相关文章:

  • Efficient Attention 理解
  • 美团完整面经
  • Matlab解决无法读取路径中的空格
  • matlab分布式电源微电网潮流
  • uni-app 自定义路由封装模块详解(附源码逐行解读)
  • FEMFAT许可使用数据分析工具介绍
  • MySQL 主从复制与一主多从架构实战详解
  • Electron-vite【实战】MD 编辑器 -- 编辑区(含工具条、自定义右键快捷菜单、快捷键编辑、拖拽打开文件等)
  • 深入理解 TCP 套接字:Socket 编程入门教程
  • uniapp请求接口封装
  • C#引用传递代码记录
  • 第七章: SEO与渲染方式
  • 滚珠导轨在汽车自动化装配线中的核心传动
  • AVCap视频处理成帧和音频脚本
  • CKA考试知识点分享(9)---gateway api
  • 混合型交易所架构:CEX+DEX融合与Layer2扩展方案
  • Visual Stdio程序弹出的黑框内容如何复制
  • (天文学)恒星的介绍分类
  • 中兴B860AV1.1江苏移动-自动降级包
  • 手写RPC框架<四> 负载均衡
  • LSTM-XGBoost回归预测,多输入单输出(Matlab完整源码和数据)
  • 【AI时代速通QT】第一节:C++ Qt 简介与环境安装
  • 41页PPT | 基于AI制造企业解决方案架构设计智能制造AI人工智能应用智能质检人工智能质检建设
  • MyBatis实战指南(六)自动映射
  • 科技评论:Jim Keller 的“反向”战略:RISC-V 成为中国应对美国芯片封锁的关键武器
  • 为何AI推理正推动云计算从集中式向分布式转型
  • 一个教学项目pom.xml杂记
  • V837s-SDK Telnetd服务连接不上异常解决
  • 蓝奏云(Lanzou Cloud)一款国内知名的免费网盘和文件分享服务 以及蓝奏云的api
  • Cesium1.95中高性能加载1500个点