スレッド プールは、タスクの実行に使用できる、事前にインスタンス化された再利用可能なスレッドのグループです。タスクが送信されると、そのタスクはプール内のアイドル状態のスレッドに割り当てられます。すべてのスレッドがビジーの場合、タスクはスレッドが使用可能になるまでキュー内で待機します。
スレッド プールにはいくつかの利点があります:
タスクをスレッド プールに送信すると、次の手順が実行されます:
スレッド プールは、Web サーバーでのリクエストの処理やジョブのバッチの処理など、多数の短期間のタスクを管理する必要があるシナリオで特に役立ちます。
Java は、java.util.concurrent パッケージでいくつかの組み込みスレッド プール実装を提供します。最も一般的に使用されるのは ExecutorService です。 Java でスレッド プールを作成して使用する方法を見てみましょう。
Java でスレッド プールを作成するには、Executors クラスを使用できます。このクラスは、さまざまなタイプのスレッド プールを作成するためのさまざまなメソッドを提供します。
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolExample { public static void main(String[] args) { // Create a fixed thread pool with 5 threads ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { Runnable task = new Task(i); executorService.execute(task); } executorService.shutdown(); } } class Task implements Runnable { private int taskId; public Task(int taskId) { this.taskId = taskId; } @Override public void run() { System.out.println("Task " + taskId + " is being executed by " + Thread.currentThread().getName()); } }
Java は、さまざまなシナリオ向けに設計されたいくつかのタイプのスレッド プールを提供します。
固定スレッド プール : 固定数のスレッドを作成します。すべてのスレッドがビジー状態の場合、タスクはキューに入れられます。
ExecutorService fixedPool = Executors.newFixedThreadPool(10);
キャッシュされたスレッド プール : 必要に応じて新しいスレッドを作成しますが、利用可能な場合は以前に構築されたスレッドを再利用します。多くの短期間のタスクの実行に適しています。
ExecutorService cachedPool = Executors.newCachedThreadPool();
シングル スレッド エグゼキューター: タスクを順番に実行する単一のワーカー スレッドを作成します。
ExecutorService singlePool = Executors.newSingleThreadExecutor();
スケジュールされたスレッド プール: 指定された遅延の後、または定期的にコマンドを実行するようにスケジュールできるスレッド プールを作成します。
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(5);
この例では、5 つのスレッドを持つ固定スレッド プールが作成されます。 10 個のタスクをプールに送信します。プールは、これらのタスクを使用可能なスレッドに割り当てます。すべてのスレッドがビジーの場合、タスクはキュー内で待機します。
期待される出力:
Task 0 is being executed by pool-1-thread-1 Task 1 is being executed by pool-1-thread-2 Task 2 is being executed by pool-1-thread-3 Task 3 is being executed by pool-1-thread-4 Task 4 is being executed by pool-1-thread-5 Task 5 is being executed by pool-1-thread-1 Task 6 is being executed by pool-1-thread-2 Task 7 is being executed by pool-1-thread-3 Task 8 is being executed by pool-1-thread-4 Task 9 is being executed by pool-1-thread-5
Java のスレッド プールは、タスクを効率的に管理および実行するための堅牢な方法を提供します。固定されたスレッドのセットを再利用することにより、オーバーヘッドが削減され、マルチスレッド アプリケーションのパフォーマンスが向上します。 Web リクエストの処理、バックグラウンド ジョブの実行、並列計算の実行のいずれの場合でも、スレッド プールは Java 同時実行ツールキットの重要なツールです。
ご質問がありますか?以下のコメント欄に書き込んでください。
投稿の詳細については、 をご覧ください: Java スレッド プール: スレッドを効率的に管理する方法
以上がJava スレッド プール: スレッドを効率的に管理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。