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

CompletableFuture 源码解析

为什么会出现回调地狱

那是因为大家想把外层方法拿到的结果值,直接传递给回调函数。

但是如果把外城拿到的结果值用一个变量存储起来,例如 Future. future 在外层方法拿不到结果时, 直接阻塞住。 等拿到外层方法的结果, 在传递给 回调函数.

回调地狱

	ExecutorService executor = Executors.newFixedThreadPool(5);
ListeningExecutorService guavaExecutor = MoreExecutors.listeningDecorator(executor);
ListenableFuture<String> future1 = guavaExecutor.submit(() -> {//step 1System.out.println("执行step 1");return "step1 result";
});
ListenableFuture<String> future2 = guavaExecutor.submit(() -> {//step 2System.out.println("执行step 2");return "step2 result";
});
ListenableFuture<List<String>> future1And2 = Futures.allAsList(future1, future2);
Futures.addCallback(future1And2, new FutureCallback<List<String>>() {@Overridepublic void onSuccess(List<String> result) {System.out.println(result);ListenableFuture<String> future3 = guavaExecutor.submit(() -> {System.out.println("执行step 3");return "step3 result";});Futures.addCallback(future3, new FutureCallback<String>() {@Overridepublic void onSuccess(String result) {System.out.println(result);}        @Overridepublic void onFailure(Throwable t) {}}, guavaExecutor);}@Overridepublic void onFailure(Throwable t) {}}, guavaExecutor);

CompletableFuture

ExecutorService executor = Executors.newFixedThreadPool(5);
CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {System.out.println("执行step 1");return "step1 result";
}, executor);
CompletableFuture<String> cf2 = CompletableFuture.supplyAsync(() -> {System.out.println("执行step 2");return "step2 result";
});
cf1.thenCombine(cf2, (result1, result2) -> {System.out.println(result1 + " , " + result2);System.out.println("执行step 3");return "step3 result";
}).thenAccept(result3 -> System.out.println(result3));

CompletableFuture 原理分析

简单理解CompletableFuture 就是一个被观察者,或者理解为是一个结果容器, 因为它持有result,
这个result记录的这个Completable 的上游传递下来的结果。

同时拿到上游传递下来的结果后, 他会触发自身的stack中存储的回调函数执行, 让回调函数执行后, 回调函数把结果传递给下游的CompletableFuture 实现数据流的流动。

仅仅需要把Completure理解存储结果的容器

执行链是 Completion. 即 CompletableFuture 设置值完成后,需要调用完成的函数。
在这里插入图片描述

CompletableFuture 的同步 &异步

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

相关文章:

  • 微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
  • CentOS 安装jenkins笔记
  • DiffDet4SAR——首次将扩散模型用于SAR图像目标检测,来自2024 GRSL(ESI高被引1%论文)
  • 深入浅出Kafka Broker源码解析(下篇):副本机制与控制器
  • 总结一下找素数的三种方法
  • 【Bluedroid】蓝牙协议栈enable流程深度解析
  • 若依(RuoYi)框架项目结构全解析
  • [Dify]-进阶1- Dify 支持的多种 AI 模型解析与选择建议
  • Linux修炼:自动化构建make/Makefile
  • sshpass原理详解及自动化运维实践
  • 微软发布BioEmu模型
  • 【FPGA】AXI总线协议
  • 动态规划题解——单词拆分【LeetCode】
  • VScode链接服务器一直卡在下载vscode服务器,无法连接成功
  • 企业数字化资产管理安全、成本、协作困局难解?
  • MYSQL数据库----DCL语句
  • Linux进程状态实战指南:转换关系、监控命令与状态解析
  • 从代码学习深度强化学习 - DDPG PyTorch版
  • python赤道上空的大气环流剖面图(纬向-高度剖面)
  • 代理模式:控制对象访问
  • Spring AI 项目实战(十七):Spring Boot + AI + 通义千问星辰航空智能机票预订系统(附完整源码)
  • 无缝衔接直播流体验
  • 数据结构 单链表(1)
  • Acrobat 表单中的下拉菜单(附示例下载)
  • ESP-Timer入门(基于ESP-IDF-5.4)
  • 插入类排序的C语言实现
  • Java小白-设计模式
  • C#单例模式管理全局变量
  • OSPF与BGP的联动特性实验案例
  • OSPF与BGP的联动特性