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

CompletableFuture学习

使用场景

如果在一个项目中,用户查询一个商品信息,可能同时需要查询价格、图片、短标题等内容,且这些内容查询借助于不同接口。如果是串行执行,接口的响应速度会非常慢。所以这里采用并行方式,同时对接口进行调用查询。且可以基于任务执行的优先级顺序,进行多个任务的编排,优化时间。

Future

Java5引入Future类是也是异步执行任务,但是对于任务获取,需要通过Future.get()阻塞调用线程,或者使用轮询方式判断“Future.isDone”判断任务是否结束,再获取结果。
Future不支持异步任务编排组合

CompletableFuture

Java 8引入CompletableFuture 类可以解决Future的缺陷。CompletableFuture提供了函数式编程、异步任务编排组合(链式调用)等能力。
CompletableFuture 同时实现了 Future 和 CompletionStage 接口。

异步任务的编排

如果是采用Future,则需要采用线程池+Future的方式,当任务调用链条变长,则需要再写多次线程池+Future的方式,会造成代码非常拖沓。
CompletableFuture通过thenCombine等方式可以进行任务的编排。
一个CompletableFuture对象可以被一个环节接一个环节的处理,也可以对两个或者多个CompletableFuture进行组合处理或者等待结果完成。

Future在应对一些简单且相互独立的异步执行场景很便捷,但是在一些复杂的场景,比如同时需要多个有依赖关系的异步独立处理的时候,或者是一些类似流水线的异步处理场景时,就难以处理。

CompletableFuture方法

supplyAsync 静态方法,用于构建一个CompletableFuture对象,并异步执行传入的函数,允许执行函数有返回值T。
runAsync 静态方法,用于构建一个CompletableFuture对象,并异步执行传入函数,与supplyAsync的区别在于此方法传入的是Callable类型,仅仅执行,没有返回值。

CompletableFuture应用于流水线处理场景,在一个任务环节处理完成后,下一个任务环节接着上一个环节处理结果继续处理。

1、thenApply对CompletableFuture的执行后的具体结果进行追加处理,并将当前的CompletableFuture泛型对象更改为处理后新的对象类型,返回当前CompletableFuture对象
2、thenCompose与thenApply相似。区别在于:此方法的入参函数返回一个CompletableFuture类型对象
3、thenAccept与thenApply相似,区别在于thenAccept返回void类型在,没有具体结果输出,适合无需返回值的场景
4、thenRun,与thenAccept类似,区别在于thenAccept可以将CompletableFuture执行的结果作为入参传入并使用,但是thenRun没有任何入参,只能执行一个Runnable函数,并且返回void类型。


http://www.mrgr.cn/news/17543.html

相关文章:

  • 酿酒师的匠心独运:白酒酿造的不同工艺
  • 网络层 III(划分子网和构造超网)【★★★★★★】
  • 《C++自定义类型的流输入输出:解锁高效编程新维度》
  • 网络工程9(软路由,旁路由)
  • 【C++ Primer Plus习题】8.7
  • Linux操作系统软件管理
  • 垃圾回收机制
  • 2-83 基于matlab的自适应正则化核的模糊均值聚类框架(ARKFCM)
  • 学习记录:js算法(二十一):字符串的排列、替换后的最长重复字符
  • 如何实现图片垂直旋转90度的问题
  • HarmonyOS开发实战( Beta5版)应用滑动场景帧率问题分析最佳实践
  • IDEA插件开发中JavaProgramPatcher的使用
  • 【JUC】08-线程等待与唤醒
  • 搭建IPsec VPN隧道解决PLC设备与主控上位机无法使用公网IP进行通信的问题
  • [STM32]从零开始的STM32标准库环境搭建(小白向)
  • 【读书笔记-《30天自制操作系统》-13】Day14
  • Ai Illustrator 取消吸附到像素点,鼠标拖动的时候只能到像素点
  • pg 唯一性约束修复
  • ConcurrentHashmap面试【高频】
  • 家里装修如何选择五金件?听商家说还是信品牌