CompletableFuture
类是在 Java 8 中引入的,用于表示可以通过显式设置其值和状态来完成的 Future
。它可以作为 java.util.concurrent.CompletionStage
使用。它支持依赖函数和动作,这些函数和动作会在 Future
完成时触发。在 Java 9 中,CompletableFuture
API 进一步得到了增强。以下是相关的变更。
支持延迟和超时
方法:completeOnTimeout
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit);
这个方法会在给定的超时时间内完成 CompletableFuture
,如果在此之前没有其他完成操作的话,则使用给定的值来完成。
方法:orTimeout
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit);
这个方法会在给定的超时时间内异常地完成 CompletableFuture
,如果在此之前没有其他完成操作的话,则使用 TimeoutException
来异常地完成。
改进了子类的支持
方法:defaultExecutor
public Executor defaultExecutor();
它返回用于未指定执行器的异步方法的默认执行器。此方法可以在子类中重写以返回执行器,提供至少一个独立线程。
方法:newIncompleteFuture
public <U> CompletableFuture<U> newIncompleteFuture();
返回一个新的未完成的 CompletableFuture
,类型为 CompletionStage
方法要返回的类型。CompletableFuture
类的子类应该重写此方法以返回与此 CompletableFuture
相同类型的实例。默认实现返回 CompletableFuture
类的实例。
新的工厂方法
方法:completedFuture
public static <U> CompletableFuture<U> completedFuture(U value);
此工厂方法返回一个新的已完成的 CompletableFuture
,其值为给定的值。
方法:completedStage
public static <U> CompletionStage<U> completedStage(U value);
此工厂方法返回一个新的已完成的 CompletionStage
,其值为给定的值,并且只支持 CompletionStage
接口中存在的方法。
方法:failedStage
public static <U> CompletionStage<U> failedStage(Throwable ex);
此工厂方法返回一个新的异常完成的 CompletionStage
,其异常为给定的异常,并且只支持 CompletionStage
接口中存在的方法。