CompletableFuture 异常抛出机制

   CompletableFuture 是 Java 8 引入的 CompletableFuture 类的一个实例,它表示一个异步计算的结果。对于 CompletableFutur 类型的实例,异常可能在以下情况下被抛出:

  1. 调用 get() 方法时抛出异常

    • 当你调用 CompletableFuture 的 get() 方法时,如果异步计算过程中抛出了异常,这个异常会被封装成一个 ExecutionException 并在 get() 方法调用处抛出。
    • 如果异步计算被取消了,get() 方法会抛出一个 CancellationException
    • 如果等待异步计算结果的过程中被中断,get() 方法会抛出一个 InterruptedException
  2. 调用 join() 方法时抛出异常

    • join() 方法与 get() 类似,但它会抛出一个未经检查的异常(CompletionException),这使得你不必显式处理异常。
    • 如果异步操作中出现异常,join() 会将其包装为 CompletionException 抛出。
  3. 在异步计算过程中抛出异常

         如果 CompletableFuture 的计算逻辑中有异常抛出,这个异常将被捕获并存储在 CompletableFuture 对象中。当你通过 get() 或 join() 方法尝试获取结果时,存储的异常将被抛出。
  4. 使用 exceptionally() 方法处理异常

        你可以使用 exceptionally() 方法来处理异步计算中抛出的异常。这个方法提供了一个回调函数,当异步计算抛出异常时,可以执行一些异常处理逻辑,或者提供一个替代的结果。
  5. 使用 handle() 方法处理异常

       handle() 方法可以处理正常的计算结果和异常情况。它接收一个 BiFunction,这个函数有两个输入参数:计算的结果和抛出的异常。你可以在这个函数中根据异常的有无来决定如何处理。
  6. 使用 whenComplete() 方法观察异常

       whenComplete() 方法提供了一个 BiConsumer,允许你在计算完成时,无论正常还是异常结束,都执行一些操作。

    在所有这些情况中,只有当你试图获取 CompletableFuture 的结果时(如通过 get()join()),或者当你显式地处理异常(如通过 exceptionally()handle()whenComplete()),异常才会被抛出或处理。如果你不尝试获取结果或处理异常,CompletableFuture 中的异常可能会被忽略,并且不会影响调用者线程的执行流程。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值