首页 > 其他分享 >CompletableFuture 详解

CompletableFuture 详解

时间:2024-09-11 18:46:52浏览次数:1  
标签:返回 详解 CompletableFuture 返回值 future supplyAsync public

CompletableFuture 提供了丰富的方法来异步处理任务。

CompletableFuture.runAsync  用于执行没有返回值的任务,常用于不需要返回结果的业务 void

 public static CompletableFuture<Void> runAsync(Runnable runnable) {
        return asyncRunStage(asyncPool, runnable);
    }

CompletableFuture.supplyAsync 用于执行有返回值的任务 ,  join() 获取任务执行后的返回结果。

CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       return "返回值"
    })
future.join()

获取返回任务值:

// 如果完成则返回结果,否则就抛出具体的异常
public T get() throws InterruptedException, ExecutionException 
 
// 最大时间等待返回结果,否则就抛出具体异常
public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
 
// 完成时返回结果值,否则抛出unchecked异常。为了更好地符合通用函数形式的使用,如果完成此 CompletableFuture所涉及的计算引发异常,则此方法将引发unchecked异常并将底层异常作为其原因
public T join()
 
// 如果完成则返回结果值(或抛出任何遇到的异常),否则返回给定的 valueIfAbsent。
public T getNow(T valueIfAbsent)
 
// 如果任务没有完成,返回的值设置为给定值
public boolean complete(T value)
 
// 如果任务没有完成,就抛出给定异常
public boolean completeExceptionally(Throwable ex) 
  

异步回调处理:thenApply和thenApplyAsync

thenApply 表示某个任务执行完成后执行的动作,即回调方法,会将该任务的执行结果即方法返回值作为入参传递到回调方法中,带有返回值

CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       return "返回值"
    }).thenApply((result)->{
      //对返回结果处理
    })

thenAccept() 方法没有返回值 ,仅用于消费任务结果

CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       return "返回值"
    }).thenAccept(result->{
      //对返回结果处理
    })

allOf() 等待所有任务都完成之后再执行

    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(()->1);
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(()->2);
    CompletableFuture<String> all = CompletableFuture.allOf(future1,future2);
    all.join()
exceptionally() 异常处理:
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
       throw new RuntimeException("任务异常");
    })
future.exceptionally(ex->{
  System.out.println(ex.getMessage());
})

 

标签:返回,详解,CompletableFuture,返回值,future,supplyAsync,public
From: https://www.cnblogs.com/wlong-blog/p/18408735

相关文章

  • C++:类与对象——详解多态原理、虚函数和抽象类
    1.多态基本内容C++中的多态是面向对象编程的一个重要特性,指的是同一个函数或对象在不同的情况下可以表现出不同的行为。多态通常通过继承和虚函数来实现。它分为两种类型:编译时多态(静态多态)和运行时多态(动态多态)。多态分为两类:静态多态:函数重载和运算符重载属于静态......
  • Rest-assured框架详解
    Rest-assured框架官网官网url: https://rest-assured.io/一、接口测试介绍-什么是接口测试本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。-为什么做接口测试更早发现问题,降低研发成本减少回归......
  • 一文详解多功能智慧交通标志杆的优势
    交通标志杆是常见的城市基础设施,它们沿街而立,引导着行人和车辆,默默维护着城市交通的流畅与和谐。然而随着时代发展,传统的交通标志杆也逐渐体现出诸多不足之处。得益于物联网技术的广泛应用,新型智慧多功能交通标志杆应运而生,它们不仅仅有道路交通指示导引作用,还集成了监控、环境感......
  • HTTP状态码301和302的区别详解
    文章目录   1、简介   2、301永久重定向   3、302临时重定向   4、为何要重定向?   5、何时会重定向?   6、301和302的区别   7、302的危害/风险1、简介HTTP状态码中,301和302都是网页重定向跳转,但是两者的使用场景和效果是不一样的,不认真学习很容易搞混......
  • openGauss增量备份与恢复技术详解及定时触发实现
    openGauss作为一款高性能、高可靠的开源数据库系统,支持全量备份和增量备份,以满足不同场景下的数据保护需求。本文将详细介绍openGauss的增量备份与恢复的实现方法,并提供详细的实现代码、配置说明以及如何实现定时触发增量备份操作。0、前言查看磁盘信息通过df-lh命令查......
  • 互联网算法备案必要性+攻略全流程详解【附件+流程】
    一、算法备案的重要性算法备案是指相关企业或组织向有关部门提交其使用的算法的相关信息,以接受监管和审查。这一举措有助于确保算法的公正性、透明性和合法性,保护用户的权益,促进数字经济的健康发展。算法备案必要性强制性例如,在推荐系统中,如果算法存在偏见或歧视,可能会导致......
  • Oracle索引常用操作详解
    在Oracle中,索引是一种数据库对象,用于提高查询性能。通过索引,Oracle可以更快地找到数据,尤其是在处理大量数据时。常见的索引类型包括B-Tree索引、位图索引、唯一索引等。索引可以加速查询,但过多的索引可能会影响数据修改的性能,因此需要合理使用。1.索引的基本操作创......
  • 重装系统详解
            详细的讲解一下如何重装系统,简单易上手。一些废话:    为什么我要学重装系统,因为一个坑,我电脑里面配置的环境和存储的文件太杂乱,我自己又不想慢慢的去整理,所以打算一下全都删干净了从头开始,但是我找店铺去重装系统的时候,他给我安装了一个盗版的系统,花......
  • Java 常用集合方法详解
    在Java编程中,集合框架提供了丰富的数据结构和算法来存储和操作数据。集合框架主要包含了List、Set和Map接口,其中List和Map是最常用的接口。本文将深入探讨List和Map接口下的集合类及其常用方法,包括实际应用示例和代码片段。1.List接口及其常用方法List接口......
  • Java 排序算法详解
    排序是计算机科学中的基本操作,Java提供了多种排序算法来满足不同的需求。常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序、快速排序和堆排序。本文将逐一介绍这些排序算法及其Java实现。1.冒泡排序(BubbleSort)冒泡排序是一种简单的排序算法,其基本思想是......