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 中的异常可能会被忽略,并且不会影响调用者线程的执行流程。

你可能感兴趣的:(Java,java)