Java 9 改進的 CompletableFuture API

Java 9 新特性 Java 9 新特性

Java 8 引入了 CompletableFuture<T> 類,可能是 java.util.concurrent.Future<T> 明確的完成版(設置了它的值和狀態),也可能被用作java.util.concurrent.CompleteStage 。支持 future 完成時觸發一些依賴的函數和動作。Java 9 引入了一些CompletableFuture 的改進:

Java 9 對 CompletableFuture 做了改進:

  • 支持 delays 和 timeouts
  • 提升了對子類化的支持
  • 新的工廠方法

支持 delays 和 timeouts

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

timeout(單位在 java.util.concurrent.Timeunits units 中,比如 MILLISECONDS )前以給定的 value 完成這個 CompletableFutrue。返回這個 CompletableFutrue。

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

如果沒有在給定的 timeout 內完成,就以 java.util.concurrent.TimeoutException 完成這個 CompletableFutrue,並返回這個 CompletableFutrue。

增強了對子類化的支持

做了許多改進使得 CompletableFuture 可以被更簡單的繼承。比如,你也許想重寫新的 public Executor defaultExecutor() 方法來代替默認的 executor

另一個新的使子類化更容易的方法是:

public <U> CompletableFuture<U> newIncompleteFuture()

新的工廠方法

Java 8引入了 <U> CompletableFuture<U> completedFuture(U value) 工廠方法來返回一個已經以給定 value 完成了的 CompletableFuture。Java 9以 一個新的 <U> CompletableFuture<U> failedFuture(Throwable ex) 來補充了這個方法,可以返回一個以給定異常完成的 CompletableFuture

除此以外,Java 9 引入了下麵這對 stage-oriented 工廠方法,返回完成的或異常完成的 completion stages:

  • <U> CompletionStage<U> completedStage(U value): 返回一個新的以指定 value 完成的CompletionStage ,並且只支持 CompletionStage 裏的介面。
  • <U> CompletionStage<U> failedStage(Throwable ex): 返回一個新的以指定異常完成的CompletionStage ,並且只支持 CompletionStage 裏的介面。

Java 9 新特性 Java 9 新特性