首页 > 其他分享 > CompletableFuture异步优化代码

CompletableFuture异步优化代码

时间:2023-10-19 15:33:27浏览次数:29  
标签:异步 代码 System 任务 CompletableFuture println out

CompletableFuture异步编排优化代码

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

简介

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

创建异步任务

public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier){..}  
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier,Executor executor){..}  
public static CompletableFuture<Void> runAsync(Runnable runnable){..}  
public static CompletableFuture<Void> runAsync(Runnable runnable,Executor executor){..} 

supplyAsync

supplyAsync是创建有返回值的异步任务。它有两个方法,一个是使用默认线程池(ForkJoinPool.commonPool())的方法,一个是带有自定义线程池的重载方法

// 有返回值,默认线程池
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)
 
// 带返回值的异步,可以自定义线程池
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)
 

代码示例

标签:异步,代码,System,任务,CompletableFuture,println,out
From: https://www.cnblogs.com/dupengpeng/p/17769842.html

相关文章

  • Yarn SLS代码分析及实践
    1.背景在https://blog.51cto.com/u_15327484/7894282文章中,介绍了Yarn的两种调度器。在https://blog.51cto.com/u_15327484/7920197文章中,介绍了FairScheduler迁移CapacityScheduler的迁移实践。在实际迁移之前,必须要确保CapacityScheduler能够达到足够的收益,即吞吐率或调度时......
  • 代码检查的方式有哪几种?
     代码检查是软件开发过程中的关键环节,可以帮助发现和纠正潜在的错误和问题。以下是几种常见的代码检查方式:1.人工代码检查:  这是最基本和常见的方式,由开发人员手动检查代码。这种方式依赖于开发人员的经验和专业知识,通过逐行检查代码并查找潜在的错误和问题。2.代码审......
  • javascript如何写不用转义的字符串代码
    js中的String.raw函数 语法 String.raw`templateStr`;  String.raw(obj,...substitutions); 支持能力有限,如可以支持String.raw`c:\aaa\bbb`       //result:   c:\aaa\bbb 但是String.raw`c:\aaa\bbb\`       //result:  ......
  • LSTM-CRF模型详解和Pytorch代码实现
    在快速发展的自然语言处理领域,Transformers已经成为主导模型,在广泛的序列建模任务中表现出卓越的性能,包括词性标记、命名实体识别和分块。在Transformers之前,条件随机场(CRFs)是序列建模的首选工具,特别是线性链CRFs,它将序列建模为有向图,而CRFs更普遍地可以用于任意图。本文中crf......
  • 想让你的代码简洁,试试这个SimpleDateFormat类高深用法
    本文分享自华为云社区《从入门到精通:SimpleDateFormat类高深用法,让你的代码更简洁!》,作者:bug菌。环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8@[toc]前言日期时间在开发中是非常常见的需求,尤其是在处理与时间相关的业务逻辑时,我们需要对日期时间进行格式化、比较......
  • 深入学习C#系列文章01---C#3 革新写代码的新方式
       C#3几乎所有的新特性都是为LINQ服务的,但他们单独使用也非常有用,接下来我们来简单看看C#3的几个新特性吧。一、自动实现的属性-----编写由字段直接支持的简单属性,不再显得臃肿不堪。     之前写属性时是大至是这样:privatestringname;publicstring......
  • VS2015重构代码结构时出现:【/langversion 的选项“7.3”无效;必须是 ISO-1、ISO-2、3
    重构代码结构时出现:【/langversion的选项“7.3”无效;必须是ISO-1、ISO-2、3或Default在XXXX类库】......
  • Windows下VC++编译器32位memcpy、memmove函数汇编代码详解
    整理者:赤勇玄心行天道QQ号:280604597微信号:qq280604597QQ群:511046632博客:www.cnblogs.com/gaoyaguo  blog.csdn.net/cyz7758520?type=blog大家有什么不明白的地方,或者想要详细了解的地方可以联系我,我会认真回复的!你可以随意转载,无需注明出处!写文档实属不易,我希望大家能支......
  • PHP 代码示例
    PHP代码示例,我将展示一个购物车系统的基本实现,它包括商品类、购物车类和一些基本的操作方法。<?php//定义商品类classProduct{private$name;private$price;publicfunction__construct($name,$price){$this->name=$name;$this->price=$price;......
  • 【orcal】数据库中如何提高写代码的效率之快捷键设置
     在数据库开发的过程中,有些操作要经常进行,为避免重复造轮子,因此,我们有必要想办法简化流程,以提高我们工作的效率!1.plsql(数据库开发工具客户端)快捷设置PL/SQLDeveloper是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural......