CompletableFuture は java.util.concurrent パッケージの一部であり、より読みやすく保守しやすい方法で非同期のノンブロッキング コードを作成する方法を提供します。これは、非同期計算の将来の結果を表します。
CompletableFuture から始めると、単純な非同期タスクを作成できます。以下に例を示します:
import java.util.concurrent.CompletableFuture; public class CompletableFutureExample { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { System.out.println("Running asynchronously..."); // Simulate a long-running task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); future.join(); // Wait for the task to complete System.out.println("Task completed."); } }
デモ結果:
Running asynchronously... Task completed.
CompletableFuture を使用して、非同期タスクからの結果を返すこともできます。
import java.util.concurrent.CompletableFuture; public class CompletableFutureWithResult { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // Simulate a computation return 5 * 5; }); future.thenAccept(result -> { System.out.println("The result is: " + result); }).join(); } }
デモ結果:
The result is: 25
複数の非同期タスクの処理は一般的な使用例です。 CompletableFuture は、先物を結合するためのいくつかのメソッドを提供します。
複数の CompletableFutures からの結果を組み合わせることができます:
import java.util.concurrent.CompletableFuture; public class CombiningFutures { public static void main(String[] args) { CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 5); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2); combinedFuture.thenAccept(result -> { System.out.println("Combined result: " + result); }).join(); } }
デモ結果:
Combined result: 15
複数の Future が完了するまで待つ必要がある場合は、CompletableFuture.allOf():
を使用します。
import java.util.concurrent.CompletableFuture; public class AllOfExample { public static void main(String[] args) { CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> { // Simulate task try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> { // Simulate another task try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }); CompletableFuture<Void> allOfFuture = CompletableFuture.allOf(future1, future2); allOfFuture.join(); System.out.println("All tasks completed."); } }
デモ結果:
All tasks completed.
非同期プログラミングではエラーの処理が不可欠です。 CompletableFuture は、例外を管理するメソッドを提供します。
非同期タスクの例外を処理するには、例外的に () を使用します:
import java.util.concurrent.CompletableFuture; public class ExceptionHandlingExample { public static void main(String[] args) { CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong!"); }).exceptionally(ex -> { System.out.println("Exception occurred: " + ex.getMessage()); return null; }); future.join(); } }
デモ結果:
Exception occurred: Something went wrong!
このガイドでは、Java での同時リクエストを処理するために CompletableFuture を使用する方法を検討しました。単純な非同期タスクの作成から、複数の Future の組み合わせやエラーの処理に至るまで、CompletableFuture は非同期プログラミングに対する堅牢かつ柔軟なアプローチを提供します。
ご質問がある場合、またはさらにサポートが必要な場合は、お気軽に以下にコメントを残してください。喜んでお手伝いさせていただきます!
詳細については、 で投稿をご覧ください: Completable Future を使用した Java でのマルチスレッドの処理
以上がCompletable Future を使用した Java でのマルチスレッドの処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。