Java 8 引入了 CompletableFuture 類,可能是 java.util.concurrent.Future 明確的完成版(設(shè)置了它的值和狀態(tài)),也可能被用作java.util.concurrent.CompleteStage 。支持 future 完成時(shí)觸發(fā)一些依賴的函數(shù)和動(dòng)作。Java 9 引入了一些CompletableFuture 的改進(jìn):
Java 9 對(duì) CompletableFuture 做了改進(jìn):
• 支持 delays 和 timeouts
• 提升了對(duì)子類化的支持
• 新的工廠方法
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
在 timeout(單位在 java.util.concurrent.Timeunits units 中,比如 MILLISECONDS )前以給定的 value 完成這個(gè) CompletableFutrue。返回這個(gè) CompletableFutrue。
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
如果沒有在給定的 timeout 內(nèi)完成,就以 java.util.concurrent.TimeoutException 完成這個(gè) CompletableFutrue,并返回這個(gè) CompletableFutrue。
做了許多改進(jìn)使得 CompletableFuture 可以被更簡(jiǎn)單的繼承。比如,你也許想重寫新的 public Executor defaultExecutor() 方法來代替默認(rèn)的 executor。
另一個(gè)新的使子類化更容易的方法是:
public <U> CompletableFuture<U> newIncompleteFuture()
新的工廠方法
Java 8引入了<U> CompletableFuture<U> completedFuture(U value) 工廠方法來返回一個(gè)已經(jīng)以給定 value 完成了的 CompletableFuture。Java 9以 一個(gè)新的 <U>CompletableFuture<U> failedFuture(Throwable ex) 來補(bǔ)充了這個(gè)方法,可以返回一個(gè)以給定異常完成的 CompletableFuture。
除此以外,Java 9 引入了下面這對(duì) stage-oriented 工廠方法,返回完成的或異常完成的 completion stages:
• <U>CompletionStage<U> completedStage(U value): 返回一個(gè)新的以指定 value 完成的CompletionStage ,并且只支持 CompletionStage 里的接口。
• <U>CompletionStage<U> failedStage(Throwable ex): 返回一個(gè)新的以指定異常完成的CompletionStage ,并且只支持 CompletionStage 里的接口。