CompletableFuture を使用して Java 9 で非同期プログラミングと同時実行制御を実装する方法
はじめに:
最新のアプリケーションにおける高性能と高同時実行の需要の高まりに伴い、非同期プログラミングと同時実行制御が一般的になってきました。開発上の問題。 Java 9 で導入された CompletableFuture クラスは、非同期操作を処理する強力なメカニズムを提供し、同時実行制御を実装するためのシンプルかつ洗練された方法を提供します。この記事では、Java 9 の CompletableFuture の基本概念を紹介し、CompletableFuture を使用して非同期プログラミングと同時実行制御を実装する方法を示すサンプル コードをいくつか紹介します。
1. CompletableFuture の概要
CompletableFuture は、Java 8 で導入された非同期プログラミング メカニズムの補足であり、Future インターフェイスと CompletionStage インターフェイスを実装するクラスです。 Future インターフェイスは、完了できない可能性のある非同期タスクの結果を表すために使用されます。一方、CompletionStage インターフェイスは、非同期で実行される可能性のある計算 (操作のトリガーと結果の返しを含む) および完了する可能性がある後続の操作を表すために使用されます。計算が完了した後にトリガーされます。 CompletableFuture クラスは、これらのインターフェイスを使用するための簡略化された方法を提供し、非同期操作を処理するためのより強力な機能を提供します。
2. 基本的な使用例
まず、非同期計算の結果を表す CompletableFuture オブジェクトを作成する必要があります。 CompletableFuture クラスは、completedFuture、supplyAsync など、そのようなオブジェクトを作成するためのさまざまな静的メソッドを提供します。以下はサンプル コードです。
CompletableFuture<String> future = CompletableFuture.completedFuture("Hello, CompletableFuture!");
上記のコードでは、completedFuture メソッドを使用して完成した CompletableFuture オブジェクトを作成し、それに計算結果として文字列を渡します。
次に、非同期計算をトリガーし、前の手順で作成した CompletableFuture オブジェクトに関連付ける必要があります。 CompletableFuture クラスは、これを実現するための 2 つのメソッド、runAsync と SupplyAsync を提供します。前者は結果を返さない非同期操作を実行するために使用され、後者は結果を返す非同期操作を実行するために使用されます。以下はサンプル コードです。
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 异步计算,返回一个整数结果 return 42; });
上記のコードでは、supplyAsync メソッドを使用して、整数の結果を返す非同期で実行される計算を作成します。
非同期計算が完了したら、CompletableFuture オブジェクトのメソッドを呼び出して計算結果を処理できます。 CompletableFuture クラスは、thenApply、thenAccept など、結果を処理するためのさまざまなメソッドを提供します。以下はサンプル コードです。
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 异步计算,返回一个整数结果 return 42; }); future.thenApply(result -> { // 处理结果并返回一个新的结果 return result * 2; }) .thenAccept(result -> { // 处理最终结果 System.out.println("Final result: " + result); });
上記のコードでは、非同期計算の完了後に thenApply メソッドを呼び出して結果を処理し、新しい結果を返します。次に、thenAccept メソッドを呼び出して最終結果を処理し、出力します。
3. 同時実行制御の例
非同期プログラミングに加えて、CompletableFuture は同時実行制御を実装するためのメソッドもいくつか提供します。最も一般的に使用されるメソッドには、anyOf、allOf、join などがあります。
anyOf メソッドは、複数の CompletableFuture のいずれかが完了するのを待機するために使用されます。最初に完了した CompletableFuture オブジェクトの結果として評価される新しい CompletableFuture オブジェクトを返します。以下はサンプル コードです。
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { // 异步计算1 return 1; }); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> { // 异步计算2 return 2; }); CompletableFuture<Object> resultFuture = CompletableFuture.anyOf(future1, future2); resultFuture.thenAccept(result -> { System.out.println("First result: " + result); });
上記のコードでは、anyOf メソッドを使用して、future1 または future2 のいずれかが計算され、結果が出力されるまで待機します。
allOf メソッドは、複数の CompletableFuture のすべての計算が完了するのを待つために使用されます。これは、Void 値 (null) に評価される新しい CompletableFuture オブジェクトを返します。サンプル コードは次のとおりです。
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> { // 异步计算1 return 1; }); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> { // 异步计算2 return 2; }); CompletableFuture<Void> resultFuture = CompletableFuture.allOf(future1, future2); resultFuture.thenRun(() -> { System.out.println("All calculations are completed."); });
上記のコードでは、allOf メソッドを使用して、future1 と future2 のすべての計算が完了するまで待機し、完了メッセージを出力します。
join メソッドは、CompletableFuture の計算結果を待って結果を返すために使用されます。計算中に例外が発生した場合、例外がスローされます。以下はサンプル コードです。
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 异步计算,返回一个整数结果 return 42; }); int result = future.join(); System.out.println("Result: " + result);
上記のコードでは、join メソッドを使用して将来の計算が完了するのを待ち、その結果を取得します。
概要:
この記事では、Java 9 の CompletableFuture の基本概念を紹介し、CompletableFuture を使用して非同期プログラミングと同時実行制御を実装する方法を示すサンプル コードをいくつか示します。 CompletableFuture を使用することで、非同期操作をシンプルかつエレガントな方法で処理し、同時計算の柔軟な制御を実現できます。これらの例が CompletableFuture の理解と使用に役立つことを願っています。
以上がJava 9 での非同期プログラミングと同時実行制御に CompletableFuture を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。