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

CompletableFuture 的使用和实际业务中的应用

一、同步与异步概念

  • 同步:程序执行任务时阻塞当前线程,直到任务完成,后续代码等待任务完成后继续执行。
  • 异步:程序执行任务时不阻塞当前线程,任务由其他线程执行,当前线程可继续其他操作,任务完成后通过回调等方式处理结果。

二、使用异步编排的原因

  • 异步编排可以提高程序效率,如商品详情页的查询,通过异步化可以显著减少用户等待时间。

三、Java异步编程的演进

  • Future:Java 1.5引入,功能简单,无法处理复杂异步任务链。
    • 局限性:阻塞获取结果、缺乏组合功能、异常处理复杂。
  • CompletableFuture:Java 8引入,提供强大灵活的异步编程支持。

四、CompletableFuture的主要特点

  • 表示异步计算结果。
  • 提供非阻塞操作。
  • 组合多个异步任务。
  • 处理异常。
  • 构建复杂异步流。

五、CompletableFuture的使用

  1. runAsyncsupplyAsync

    • runAsync:无返回值的异步任务,如日志记录。
    • supplyAsync:有返回值的异步任务,如获取数据。
  2. whenCompleteexceptionally

    • whenComplete:无论成功或失败都执行的回调。
    • exceptionally:仅在异常时执行,处理异常并返回替代结果。
  3. whenCompleteAsyncthenApplyAsync

    • whenCompleteAsync:异步执行回调。
    • thenApplyAsync:异步执行并返回新值。
  4. thenAcceptthenApply

    • thenAccept:处理结果但不返回新值。
    • thenApply:处理结果并返回新值。

六、异步编排实战案例

  • 用线程池和CompletableFuture模拟商品详情页查询,优化了执行时间。

七、异步编排使用场景

  • 并行调用多个微服务。
  • 异步批量处理任务。
  • 异步处理用户请求并返回聚合结果。
  • 异步执行复杂工作流。

八、总结

  • 根据任务是否需要返回结果选择runAsyncsupplyAsync
  • 使用whenCompletewhenCompleteAsync在任务完成后执行操作。
  • 使用exceptionally处理异常。
  • 使用thenAcceptthenApply根据需要处理结果。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大话回合手游【精品西游之鸿鹄西游精修商业开服端】最新整理WIN系特色服务端+安卓苹果双端+GM后台
  • 一个手机到手机之间通话经过了哪些设备
  • SQL - 基础大汇总
  • CSS知识点详解:display+float
  • AWS CDK测试初探:掌握Assertion测试模式
  • 如何配置服务单元文件(nginx.service)
  • 深入理解 `@DateTimeFormat` 和 `@JsonFormat` 注解
  • CTF密码学小结
  • 达梦数据库的系统视图v$reserved_words
  • NGINX的源码安装
  • Polars简明基础教程十一:可视化(一)
  • NTP时间服务器的工作原理解析
  • SSH端口转发
  • 12、springboot3 vue3开发平台-前端-记住我功能实现
  • Python向IP地址发送字符串
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Akka系列(七):Actor持久化之Akka persistence
  • canvas绘制圆角头像
  • SpringCloud集成分布式事务LCN (一)
  • SQLServer之创建数据库快照
  • Vue官网教程学习过程中值得记录的一些事情
  • 分布式任务队列Celery
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 深度学习中的信息论知识详解
  • 手机端车牌号码键盘的vue组件
  • 我看到的前端
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 写代码的正确姿势
  • 一些关于Rust在2019年的思考
  • 在Unity中实现一个简单的消息管理器
  • 【干货分享】dos命令大全
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 如何在招聘中考核.NET架构师
  • 选择阿里云数据库HBase版十大理由
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (003)SlickEdit Unity的补全
  • (4)logging(日志模块)
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (二)pulsar安装在独立的docker中,python测试
  • (过滤器)Filter和(监听器)listener
  • (自适应手机端)行业协会机构网站模板
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .Net的C#语言取月份数值对应的MonthName值
  • .net开发时的诡异问题,button的onclick事件无效
  • .net网站发布-允许更新此预编译站点
  • .sh
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)