CompletableFuture API 改进

CompletableFuture 类是在 Java 8 中引入的,用于表示可以通过显式设置其值和状态来完成的 Future。 它可以作为 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)

如果在给定的超时之前没有以其他方式完成,则此方法会使用 TimeoutException 异常地完成此 CompletableFuture。


改进了对子类的支持

public Executor defaultExecutor()

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

public <U> CompletableFuture<U> newIncompleteFuture()

返回一个新的不完整的 CompletableFuture,其类型由 CompletionStage 方法返回。 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 中存在的那些方法。