CompletableFutureAPIの改善

CompletableFutureクラスはJava8で導入され、値とステータスを明示的に設定することで完了できるFutureを表します。java.util.concurrent.CompletionStageとして使用できます。これは、将来の完了時にトリガーされた依存関数とアクションをサポートします。Java 9では、CompletableFutureAPIがさらに拡張されました。以下は、APIに加えられた関連する変更です。

  • 遅延とタイムアウトのサポート。
  • サブクラス化のサポートが改善されました。
  • 新しいファクトリメソッドが追加されました。

遅延とタイムアウトのサポート

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

このメソッドは、指定されたタイムアウトの前に完了しなかった場合、指定された値でこのCompletableFutureを完了します。

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

このメソッドは、指定されたタイムアウトの前に完了しない場合、このCompletableFutureをTimeoutExceptionで例外的に完了します。

サブクラス化のサポートの改善

public Executor defaultExecutor()

エグゼキュータを指定しない非同期メソッドに使用されるデフォルトのエグゼキュータを返します。このメソッドはサブクラスでオーバーライドされ、エグゼキュータを返し、少なくとも1つの独立したスレッドを提供することができます。

public <U> CompletableFuture<U> newIncompleteFuture()

CompletionStageメソッドによって返されるタイプの新しい不完全なCompletableFutureを返します。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を返します。