Java9-completablefuture-api-improvements
CompletableFuture APIの改善
CompletableFutureクラスは、値とステータスを明示的に設定することで完了することができるFutureを表すためにJava 8で導入されました。 java.util.concurrent.CompletionStageとして使用できます。 将来の完了時にトリガーされた依存関数とアクションをサポートします。 Java 9では、CompletableFuture APIがさらに強化されました。 以下は、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()
Executorを指定しない非同期メソッドに使用されるデフォルトのExecutorを返します。 このメソッドは、サブクラスでオーバーライドされて、Executorを返し、少なくとも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を返します。