Java で CompletableFuture の並列ストリーム操作を使用する方法

WBOY
リリース: 2023-06-26 14:46:24
オリジナル
1287 人が閲覧しました

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 メソッドを使用して非同期タスクを作成し、List 型の結果を返します。タスクでは、ParallelStream メソッドを使用して処理用の並列ストリームを取得し、最後に join メソッドを使用してタスクが実行されるのを待機します。返される結果のタイプは List です。

要約すると、Java の CompletableFuture は、非同期プログラミングを実装できるだけでなく、並列ストリーム操作も実行できる非常に強力なクラスです。 CompletableFuture を使用する場合は、スレッドの安全性の問題に注意し、並列ストリーム操作を適切に使用してプログラムの同時実行パフォーマンスを向上させる必要があります。

以上がJava で CompletableFuture の並列ストリーム操作を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート