ホームページ > Java > &#&チュートリアル > Java 8 並列ストリームでカスタム スレッド プールを使用できますか?

Java 8 並列ストリームでカスタム スレッド プールを使用できますか?

Barbara Streisand
リリース: 2024-12-30 13:11:26
オリジナル
837 人が閲覧しました

Can You Use Custom Thread Pools with Java 8 Parallel Streams?

Java 8 並列ストリームのカスタム スレッド プール: 詳細ガイド

Java 8 の並列ストリームは、並列化することで計算を高速化する便利な方法を提供します。複数のスレッドにわたる操作。ただし、複雑なマルチスレッド アプリケーションでは、ボトルネックを回避し、モジュール間の分離を確保することが重要です。ここで疑問が生じます: 並列ストリーム処理にカスタム スレッド プールを利用できますか?

実行できますか?

Java 8 並列ストリームの標準ドキュメントでは、カスタム スレッド プールを使用する可能性について明示的に言及しています。ただし、型破りなソリューションが存在します。

Fork-Join プールのトリック:

並列操作をタスクとして ForkJoinPool に送信すると、その操作はそのプール内に残り、デフォルトの ForkJoinPool.commonPool() は使用しません。これにより、特定のモジュールの専用プールを作成し、そのタスクを潜在的な干渉から分離できます。

実装:

final int parallelism = 4;
ForkJoinPool forkJoinPool = null;
try {
    forkJoinPool = new ForkJoinPool(parallelism);
    final List<Integer> primes = forkJoinPool.submit(() ->
        // Parallel task here, for example
        IntStream.range(1, 1_000_000).parallel()
                .filter(PrimesPrint::isPrime)
                .boxed().collect(Collectors.toList())
    ).get();
    System.out.println(primes);
} catch (InterruptedException | ExecutionException e) {
    throw new RuntimeException(e);
} finally {
    if (forkJoinPool != null) {
        forkJoinPool.shutdown();
    }
}
ログイン後にコピー

メカニズム:

ForkJoinTask.fork メソッド。タスクを送信するために使用されます。プールを調べて、現在のタスクが ForkJoinPool で実行されているかどうかを確認します。その場合、並列操作はそのプール内で実行されます。それ以外の場合は、共通プールが使用されます。カスタム ForkJoinPool を介してタスクを送信すると、タスクがそのプールの境界内で確実に動作するようになります。

例:

提供された質問の不自然な例を考えてみましょう。 1 つのモジュール内のタスクは、共有スレッド プール内の他のタスクに影響を与える可能性があります。さまざまなモジュールのカスタム プールを作成し、それらの並列操作をこれらのプールに送信することで、問題を回避し、複雑なシナリオで並列ストリームを安全に利用できます。

結論:

Java 8 並列ストリームはカスタム スレッド プールをネイティブにサポートしていません。Fork-Join Pool トリックは実行可能な解決策を提供します。並列タスクを ForkJoinPool 内のタスクとして送信することで、並列タスクをデフォルトのプールから分離し、特定のモジュール用の専用プールを作成して、パフォーマンスを向上させ、複雑なマルチスレッド アプリケーションの潜在的なボトルネックを回避できます。

以上がJava 8 並列ストリームでカスタム スレッド プールを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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