Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9におけるCompletableFuture APIの主な改善点を徹底解説

CompletableFuture APIは、Javaにおける非同期(asynchronous)プログラミングのための仕組みです。このAPIを使うことで、main()スレッドとは別のスレッド上でタスクを実行し、その進行状況・完了・失敗をmain()スレッドへ通知できるため、ノンブロッキングなコードを記述できます。

Java 9では、このCompletableFuture APIに対して以下の3つの改善が導入されました。

  • タイムアウトと遅延のサポート
  • サブクラス化サポートの強化
  • 新しいファクトリメソッドの追加

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

orTimeout() メソッド

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

このメソッドは、タスクが指定された時間内に完了しなかった場合に、TimeoutExceptionを発生させて処理を終了させるために使用します。長時間応答しない非同期処理を安全に打ち切れるため、堅牢なアプリケーション設計に役立ちます。

completeOnTimeout() メソッド

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

このメソッドは、指定された時間内に処理が完了しなかった場合に、引数で渡したデフォルト値を使ってCompletableFutureを完了させます。タイムアウト時でも例外ではなく代替値を返したいケースに便利です。

2. サブクラス化サポートの強化

defaultExecutor() メソッド

public Executor defaultExecutor()

このメソッドは、Executorが明示的に指定されていない非同期メソッドで使用されるデフォルトのExecutorを返します。サブクラスでオーバーライドすることにより、少なくとも1つの独立したスレッドを持つ独自のExecutorを提供できます。

newIncompleteFuture() メソッド

public <U> CompletableFuture<U> newIncompleteFuture()

このメソッドは、CompletionStageインターフェースの各メソッドが返すべき、新しい未完了状態のCompletableFutureインスタンスを生成します。これにより、サブクラス側で戻り値の型を柔軟に制御できるようになりました。

3. 新しいファクトリメソッド

completedFuture() メソッド

public static <U> CompletableFuture<U> completedFuture(U value)

このファクトリメソッドは、指定された値ですでに完了済みの状態となっている、新しいCompletableFutureを返します。

completedStage() メソッド

public static <U> CompletionStage<U> completedStage(U value)

このファクトリメソッドは、指定された値ですでに完了している新しいCompletionStageを返します。返されるオブジェクトはCompletionStageインターフェースに定義されたメソッドのみをサポートするため、実装の詳細を隠蔽した安全な戻り値として活用できます。

これらの改善により、Java 9以降のCompletableFutureは、タイムアウト制御やカスタマイズ性が大幅に向上し、より実用的な非同期処理の構築が可能になりました。

  1. Java 9のJShellで守るべきルールまとめ!REPLツールの使い方と注意点を解説

    Java 9では、対話型のREPL(Read-Evaluate-Print-Loop)ツールであるJShellが導入されました。JShellを使うことで、コードスニペットを実行しながら、その結果を即座に確認できます。ここでいうスニペット(snippet)とは、標準的なJava構文で記述できる1つの命令文を指し、単一の式、ステートメント、または宣言に相当します。 JShellは学習やプロトタイピングに非常に便利なツールですが、利用する際にはいくつか守るべきルールがあります。以下にその主なルールをまとめます。 JShellで従うべき主なルール スニペットには、import宣言、クラス宣言、メソッ

  2. Java 9における@Deprecatedアノテーションの改善点とは?新要素「since」「forRemoval」を徹底解説

    @Deprecatedアノテーションとはクラス、メソッド、フィールドなど、プログラム内のあらゆる要素に付与できる@Deprecatedアノテーションは、「その要素はもはや使用すべきではない」ことを示すためのものです。要素が非推奨とされる主な理由は以下の通りです。使用すると危険であり、エラーを引き起こす可能性がある将来のバージョンで互換性がなくなる可能性がある将来のバージョンで削除される可能性があるより優れた、効率的な代替手段がすでに提供されているJava 9で追加された2つの新しい要素Java 9では、@DeprecatedアノテーションにsinceとforRemovalという2つの新しい属性