ホームページ >Java >&#&チュートリアル >Java並列プログラミングにおけるExecutorとThreadPoolの使用状況分析

Java並列プログラミングにおけるExecutorとThreadPoolの使用状況分析

WBOY
WBOYオリジナル
2024-04-18 17:33:02472ブラウズ

Executor インターフェイスはタスク実行メカニズムを提供し、ThreadPool はその実装であり、タスクを実行するためのスレッド プールを管理します。 ThreadPool は、newFixedThreadPool() などの Executors ツール クラスを使用して作成され、execute() メソッドを使用してタスクを送信します。実際のケースでは、ExecutorService と ThreadPool を使用して数値の二乗和を計算し、並列プログラミングの使用法を示します。考慮事項には、スレッド プールのサイズとタスク数のバランス、スローされる例外の回避、使用後に ThreadPool を閉じることが含まれます。

Java並列プログラミングにおけるExecutorとThreadPoolの使用状況分析

Java 並列プログラミングにおける Executor と ThreadPool の使用ガイド

Java で並列プログラミングを実装する場合、ExecutorThreadPool が 2 つの中心的な概念です。このチュートリアルでは、両方のメカニズムを詳しく説明し、実際の例を通じてそれらの使用方法を示します。

Executor

Executor インターフェイスは、タスク実行メカニズムを表します。これは、実行のためにタスクを送信するための一般的なメソッド execute() を提供します。 Executor インターフェイスを実装すると、カスタム スレッド プールを作成したり、既製のスレッド プールを使用したりするなど、タスクの実行方法をカスタマイズできます。

public class CustomExecutor implements Executor {

    @Override
    public void execute(Runnable command) {
        // 自定义任务执行逻辑
        // ...
    }
}

ThreadPool

ThreadPoolExecutor の実装であり、タスクを並列実行するためのスレッドのセットを提供します。スレッドのライフサイクルを管理し、同時に実行されるタスクの数がスレッド プール サイズを超えないようにします。

Executors ツール クラスを使用して、newFixedThreadPool()newCachedThreadPool() などのスレッド プールを作成できます:

ExecutorService threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Runnable() {
    @Override
    public void run() {
        // 任务代码
    }
});

実践的なケース

##数値の二乗の計算##数値の二乗の和を計算するシナリオを考えてみましょう。並行して。

Executor

ThreadPool を使用して、次のことを実現できます。 <pre class='brush:java;toolbar:false;'>import java.util.Arrays; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SquareSum { private static int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); long sum = 0; for (int number : numbers) { threadPool.execute(() -&gt; sum += Math.pow(number, 2)); } threadPool.shutdown(); while (!threadPool.isTerminated()) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(&quot;Square sum: &quot; + sum); } }</pre> この場合、

Executors.newFixedThreadPool()

はスレッド プールを作成します。そのサイズは、使用可能なプロセッサの数と一致します。次に、タスクがスレッド プールに送信され、各数値の 2 乗が並行して計算されます。最後に、shutdown() メソッドはスレッド プールをシャットダウンし、すべてのタスクが完了するのを待ちます。

注意事項

    ThreadPool
  • を使用する場合は、スレッド プールのサイズとタスク数のバランスに注意する必要があります。スレッド プールが大きすぎるとリソースの無駄が発生する可能性があり、スレッド プールが小さすぎるとパフォーマンスのボトルネックが発生する可能性があります。
  • Executor
  • に送信されたタスクは例外をスローすべきではありません。タスクが例外をスローすると、Executor が失敗し、他のすべてのタスクが実行に失敗する可能性があります。
  • ThreadPool
  • を使用した後は、shutdown() メソッドを使用してスレッド プールを閉じ、すべてのスレッドが停止していることを確認する必要があります。

以上がJava並列プログラミングにおけるExecutorとThreadPoolの使用状況分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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