Java の
CompletableFuture は、非同期プログラミングと高度なストリーム操作を実装できる強力なクラスであり、重要なアプリケーションの 1 つは並列ストリーム操作です。
並列ストリーミングとは、コレクションを複数の部分に分割し、それらを異なるスレッドで処理し、最後に結果をマージすることです。
Java 8 より前は、Java のストリームはシリアルにのみ処理できましたが、Java 8 ではプログラムの同時パフォーマンスを向上させるために並列ストリーム操作が追加されました。
最初に例を見てみましょう:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); list.parallelStream().forEach(System.out::println);
上の例では、ParallelStream メソッドを使用して並列ストリームを取得します。 ParallelStream メソッドは並列ストリームを返します。コレクションの場合、並列ストリームはコレクションを複数の部分に分割し、各部分が異なるスレッドで処理され、結果がマージされます。
同時に、CompletableFuture を使用して並列ストリーム操作を実行することもできます。以下は例です:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { list.parallelStream().forEach(System.out::println); }); future.join();
上の例では、CompletableFuture の runAsync メソッドを使用して非同期タスクを作成します。タスク内では、ParallelStream メソッドを使用して処理用の並列ストリームを取得し、最後にjoin メソッドはタスクの実行を待つために使用されます。
runAsync メソッドの使用に加えて、supplyAsync メソッドを使用して非同期タスクを作成し、結果を返すこともできます。例は次のとおりです:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); CompletableFuture<List<Integer>> future = CompletableFuture.supplyAsync(() -> { return list.parallelStream().map(i -> i * 2).collect(Collectors.toList()); }); List<Integer> result = future.join(); System.out.println(result);
上記の例では、 CompletableFuture の SupplyAsync メソッドを使用して非同期タスクを作成し、Listc0f559cc8d56b43654fcbe4aa9df7b4a 型の結果を返します。タスクでは、ParallelStream メソッドを使用して処理用の並列ストリームを取得し、最後に join メソッドを使用してタスクが実行されるのを待機します。返される結果のタイプは List
要約すると、Java の CompletableFuture は、非同期プログラミングを実装できるだけでなく、並列ストリーム操作も実行できる非常に強力なクラスです。 CompletableFuture を使用する場合は、スレッドの安全性の問題に注意し、並列ストリーム操作を適切に使用してプログラムの同時実行パフォーマンスを向上させる必要があります。
以上がJava で CompletableFuture の並列ストリーム操作を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。