CompletableFuture异步优化代码

鼠扑  金牌会员 | 2023-11-9 10:38:58 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 920|帖子 920|积分 2760

CompletableFuture异步编排优化代码

我们在项目开发中,有可能遇到一个接口需要调用N个服务的接口。比如用户请求获取订单信息,需要调用用户信息、商品信息、物流信息等接口,最后再汇总数据统一返回。如果使用串行的方法按照顺序挨个调用接口,这样接口的响应的速度就很慢。如果并行调用接口,同时调用就会节省很多时间。下面就介绍一个好用的异步编排工具CompletableFuture
简介

CompletableFuture 是 Java 8 中新增的一个异步编程工具类,它是基于 Future 和 CompletionStage 接口构建的,可以与 Java 8 中的 Stream API 配合使用,也能够与 Java 9 中的 Reactive Stream API 进行交互。
主要用于异步执行任务并返回结果,实现异步计算和操作组合。它提供了一种灵活、可组合的方式来实现异步计算,同时也提供了异常处理、取消、超时等特性。在CompletableFuture中,我们可以通过回调函数来处理任务的结果,也可以使用其它方法来组合多个CompletableFuture对象,以构建更复杂的异步操作流水线。

创建异步任务
  1. public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier){..}  
  2. public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier,Executor executor){..}  
  3. public static CompletableFuture<Void> runAsync(Runnable runnable){..}  
  4. public static CompletableFuture<Void> runAsync(Runnable runnable,Executor executor){..}
复制代码
supplyAsync

supplyAsync是创建有返回值的异步任务。它有两个方法,一个是使用默认线程池(ForkJoinPool.commonPool())的方法,一个是带有自定义线程池的重载方法
  1. // 有返回值,默认线程池
  2. public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
  3. // 带返回值的异步,可以自定义线程池
  4. public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)
复制代码
代码示例
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表