Java 9 改進的 CompletableFuture API
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 裏的介面。