Java9 CompletableFuture API


CompletableFuture類是在Java 8中引入的,可以通過設定其值和狀態顯式來完成。 它可以用作java.util.concurrent.CompletionStage。 它支援未來完成時觸發的相關函式和操作。 在Java 9中,CompletableFuture API進一步得到了增強。 以下是對API進行的相關更改。

  • 支援延遲和超時。
  • 改進了對子類的支援。
  • 新增了新的工廠方法。

1. 支援延遲和超時

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

如果在給定超時之前未完成,則此方法使用給定值完成CompletableFuture

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

如果在給定的超時之前沒有完成,則此方法異常地完成此CompletableFuture並帶有TimeoutException異常。

2. 改進了對子類的支援

public Executor defaultExecutor()

它將返回用於未指定Executor非同步方法的預設Executor。 可以在子類中重寫此方法以返回Executor以提供一個最小的獨立執行緒。

public <U> CompletableFuture<U> newIncompleteFuture()

返回由CompletionStage方法返回型別的新不完整CompletableFutureCompletableFuture類的子類應該重寫此方法以返回與CompletableFuture相同的類的範例。 預設實現返回CompletableFuture類的一個範例。

3. 新工廠方法

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介面中存在的那些方法。