Java 9 CompletableFuture API改进


CompletableFuture类是在Java8中引入的,可以通过设置其值和状态显式来完成。它可以用作java.util.concurrent.CompletionStage。它支持未来完成时触发的相关函数和操作。在Java9中,CompletableFuture API进一步得到了增强。以下是对API进行的相关更改。

  • 支持延迟和超时。
  • 改进了对子类的支持。
  • 添加了新的工厂方法。

支持延迟和超时

public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)

如果在给定超时之前未完成,则此方法使用给定值完成此CompletableFuture。

public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)

如果在给定的超时之前没有完成,则此方法异常地完成此CompletableFuture并带有TimeoutException。

改进了对子类的支持

public Executor defaultExecutor()

它将返回用于未指定Executor的异步方法的默认Executor。可以在子类中重写此方法以返回Executor以提供一个最小的独立线程。

public <U> CompletableFuture<U> newIncompleteFuture()

返回由CompletionStage方法返回的类型的新的不完整CompletableFuture。CompletableFuture类的子类应该重写此方法以返回与此CompletableFuture相同的类的实例。默认实现返回类CompletableFuture的一个实例。

新工厂方法

public static <U> CompletableFuture<U> completedFuture(U value)

这个工厂方法返回一个已经用给定值完成的新的CompletableFuture。

public static <U> CompletionStage<U> completedStage(U value)

这个工厂方法返回一个新的CompletionStage,它已经用给定的值完成,并且只支持接口CompletionStage中存在的那些方法。

public static <U> CompletionStage<U> failedStage(Throwable ex)

该工厂方法返回一个新的CompletionStage,该异常已经异常完成,并且仅支持CompletionStage接口中存在的那些方法。