赞
踩
CompletableFuture
是 Java 8 引入的 CompletableFuture 类的一个实例,它表示一个异步计算的结果。对于 CompletableFutur
类型的实例,异常可能在以下情况下被抛出:
调用 get()
方法时抛出异常
CompletableFuture
的 get()
方法时,如果异步计算过程中抛出了异常,这个异常会被封装成一个 ExecutionException
并在 get()
方法调用处抛出。get()
方法会抛出一个 CancellationException
。get()
方法会抛出一个 InterruptedException
。调用 join()
方法时抛出异常
join()
方法与 get()
类似,但它会抛出一个未经检查的异常(CompletionException
),这使得你不必显式处理异常。join()
会将其包装为 CompletionException
抛出。在异步计算过程中抛出异常
如果CompletableFuture
的计算逻辑中有异常抛出,这个异常将被捕获并存储在 CompletableFuture
对象中。当你通过 get()
或 join()
方法尝试获取结果时,存储的异常将被抛出。使用 exceptionally() 方法处理异常
你可以使用exceptionally()
方法来处理异步计算中抛出的异常。这个方法提供了一个回调函数,当异步计算抛出异常时,可以执行一些异常处理逻辑,或者提供一个替代的结果。使用 handle() 方法处理异常
handle()
方法可以处理正常的计算结果和异常情况。它接收一个 BiFunction
,这个函数有两个输入参数:计算的结果和抛出的异常。你可以在这个函数中根据异常的有无来决定如何处理。使用 whenComplete() 方法观察异常
whenComplete()
方法提供了一个 BiConsumer
,允许你在计算完成时,无论正常还是异常结束,都执行一些操作。 在所有这些情况中,只有当你试图获取 CompletableFuture
的结果时(如通过 get()
或 join()
),或者当你显式地处理异常(如通过 exceptionally()
、handle()
或 whenComplete()
),异常才会被抛出或处理。如果你不尝试获取结果或处理异常,CompletableFuture
中的异常可能会被忽略,并且不会影响调用者线程的执行流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。