Executor インターフェイスはタスク実行メカニズムを提供し、ThreadPool はその実装であり、タスクを実行するためのスレッド プールを管理します。 ThreadPool は、newFixedThreadPool() などの Executors ツール クラスを使用して作成され、execute() メソッドを使用してタスクを送信します。実際のケースでは、ExecutorService と ThreadPool を使用して数値の二乗和を計算し、並列プログラミングの使用法を示します。考慮事項には、スレッド プールのサイズとタスク数のバランス、スローされる例外の回避、使用後に ThreadPool を閉じることが含まれます。
Java 並列プログラミングにおける Executor と ThreadPool の使用ガイド
Java で並列プログラミングを実装する場合、Executor
と ThreadPool
が 2 つの中心的な概念です。このチュートリアルでは、両方のメカニズムを詳しく説明し、実際の例を通じてそれらの使用方法を示します。
Executor
Executor
インターフェイスは、タスク実行メカニズムを表します。これは、実行のためにタスクを送信するための一般的なメソッド execute()
を提供します。 Executor
インターフェイスを実装すると、カスタム スレッド プールを作成したり、既製のスレッド プールを使用したりするなど、タスクの実行方法をカスタマイズできます。
public class CustomExecutor implements Executor { @Override public void execute(Runnable command) { // 自定义任务执行逻辑 // ... } }
ThreadPool
ThreadPool
は Executor
の実装であり、タスクを並列実行するためのスレッドのセットを提供します。スレッドのライフサイクルを管理し、同時に実行されるタスクの数がスレッド プール サイズを超えないようにします。
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(() -> sum += Math.pow(number, 2));
}
threadPool.shutdown();
while (!threadPool.isTerminated()) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Square sum: " + sum);
}
}</pre>
この場合、
はスレッド プールを作成します。そのサイズは、使用可能なプロセッサの数と一致します。次に、タスクがスレッド プールに送信され、各数値の 2 乗が並行して計算されます。最後に、shutdown()
メソッドはスレッド プールをシャットダウンし、すべてのタスクが完了するのを待ちます。
Executor
が失敗し、他のすべてのタスクが実行に失敗する可能性があります。
shutdown()
メソッドを使用してスレッド プールを閉じ、すべてのスレッドが停止していることを確認する必要があります。
以上がJava並列プログラミングにおけるExecutorとThreadPoolの使用状況分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。