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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-28 14:11:28970ブラウズ

Can Java 8 Parallel Streams Utilize a Custom Thread Pool?

Java 8 並列ストリーム用のカスタム スレッド プール

Java 8 の並列ストリームは、操作を並列化し、パフォーマンスを向上させる便利な方法を提供します。ただし、特定のシナリオでは、カスタム スレッド プールを使用してスレッド割り当てを制御し、アプリケーション内のさまざまなタスクを区分化することが望ましい場合があります。

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

当初、カスタム スレッド プールを並列ストリームに割り当てる明示的な方法はありませんでした。これは、複数のモジュールを含むアプリケーションを扱う場合や、遅いタスクが他のモジュールをブロックしないようにする必要がある場合に課題を引き起こす可能性があります。

フォーク-ジョイン プールのトリック

ただし、次のような問題があります。 Fork-Join Pool API を使用した回避策。別個のフォーク/ジョイン プール内で並列タスクを送信することにより、ストリーム操作で使用される共通プールから並列タスクを分離できます。以下に例を示します。

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();
    }
}

このコードは、指定された並列処理を持つ専用のフォーク/ジョイン プールを作成し、そこに並列タスクの実行を送信します。これにより、指定されたタスクが共通のプールから分離されて、独自のスレッド プール内で動作できるようになります。

結論

フォーク/ジョイン プールを使用した回避策は、手段を提供します。 Java 8 の並列ストリームにカスタム スレッド プールを使用します。これにより、スレッドの割り当てと区画化をより細かく制御できるようになり、モジュール間をまたがずにタスクを並列実行できるようになります。ブロックしています。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。