Concurrency 中級

CompletableFutureを使ってブロッキングなしに非同期操作をチェーンする。

✕ Pre-Java 8
Future<String> future =
    executor.submit(this::fetchData);
String data = future.get(); // blocks
String result = transform(data);
✓ Java 8+
CompletableFuture.supplyAsync(
    this::fetchData
)
.thenApply(this::transform)
.thenAccept(IO::println);
このコードに問題がありますか? お知らせください。
🔗

チェーン可能

非同期のステップを可読なパイプラインに組み合わせられます。

🚫

ノンブロッキング

結果待ちでスレッドがアイドルになりません。

🛡️

エラーハンドリング

exceptionally()とhandle()でクリーンなエラー回復が可能です。

旧来のアプローチ
ブロッキングFuture.get()
モダンなアプローチ
CompletableFuture
JDKバージョン
8
難易度
中級
CompletableFutureのチェーン
利用可能

JDK 8(2014年3月)以降、広く利用可能

CompletableFutureはノンブロッキングな非同期パイプラインを実現します。thenApply、thenCompose、thenAcceptで操作をチェーンし、exceptionally()でエラーを処理します。allOf/anyOfで複数のFutureを組み合わせられます。

共有 𝕏 🦋 in