CompletableFuture 详解

本文详细介绍了Java中的CompletableFuture,包括常用方法如thenApply、thenCompose等,以及异步操作的区别,如runAsync与supplyAsync。还讨论了如何处理结果和异常,以及线程池的选择与使用建议。
摘要由CSDN通过智能技术生成

常用方法

  1. 依赖关系
  • thenApply() 把前面任务的执行结果,交给后面的Funcation
  • thenCompose() 用来连接两个有依赖关系的任务,结果由第二个任务返回
  1. and集合关系
  • thenCombine() 合并任务,有返回值
  • thenAcceptBoth() 两个任务执行完成后,将结果交给thenAcceptBoth处理,无返回值
  • runAfterBoth() 两个任务都执行完成后 ,执行下一步操作(Runnable任务类型)
  1. or聚合关系
  • applyToEither() 两个任务那个执行的快,就使用那一个结果,有返回值
  • acceptEither() 两个任务那个执行的快,就消费那一个结果,无返回值
  • runAfterEither() 任意一个任务执行完成,进行下一步操作(Runnable雷武类型)
  1. 并行执行
  • allof() 当所有给定的CompletableFuture 完成时,返回一个新的CompletableFuture
  • anyof() 当任意一个给定的CompletableFuture完成时,返回一个新的CompletableFuture
  1. 结果处理
  • whenComplete 当任务完成时,将使用结果(或者null)和此阶段的异常(或null如果没有)执行给定操作
  • exceptinally 返回一个新的CompletableFuture,当前面的CompletableFuture完成时,它也完成,当他异常完成时,给定函数的异常触发CompletableFuture的完成
  1. 获取CompletableFuture异步之后的返回值
  • 相同点
    1. join()和get()方法都是用来获取CompletableFuture异步之后的返回值
  • 区别
    1. join()方法抛出的是uncheck异常(即RuntimeException),不会强制开发者抛出,会将异常包装成CompletionException异常CancellationException异常,但是本质原因还是代码内存在的真正的异常
public static void main(String[] args) {
   
    CompletableFuture<Integer> f1 = CompletableFuture.supplyAsync(() -> {
   
        int i =1/0;
        return 1;
    });
    CompletableFuture.allOf(f1).join();
    System.out.println("CompletableFuture Test");
}
Exception in thread "main" java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
    at java
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值