Java スレッドのインタビューの質問: スレッド プールとは何ですか? スレッド プールを使用する理由
スレッド プールは、多数の同時タスクを処理するために再利用されるスレッドのグループです。スレッド プールを使用すると、スレッドの作成と破棄の数が減り、リソースの使用率が向上し、スレッドの数と実行ステータスをより適切に管理および制御できます。例を使用して、Java でのスレッド プールの使用法を説明してみましょう。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 创建一个可重用、固定线程数的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(3);
// 向线程池中添加 10 个任务
for (int i = 0; i < 10; i++) {
Runnable task = new Task(i);
threadPool.execute(task);
}
// 禁止提交新任务,并试图终止所有正在执行的任务
threadPool.shutdown();
// 判断是否所有任务都已经执行完成
while (!threadPool.isTerminated()) {
Thread.yield();
}
System.out.println("All tasks are completed.");
}
}
class Task implements Runnable {
private int number;
public Task(int number) {
this.number = number;
}
@Override
public void run() {
System.out.println("Task " + number + " is running on thread " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + number + " is completed on thread " + Thread.currentThread().getName());
}
}
上の例では、最初に固定サイズ 3 のスレッド プールを作成しthreadPool
、次にそのスレッド プールに 10 個のタスクを追加しました。これらのタスクはすべて、Runnable
インターフェイス。各タスクが実行されると、現在のタスクの番号とそのタスクが属しているスレッドの名前が出力され、1 秒間のスリープ後に完了情報が出力されます。最後にshutdownメソッドを呼び出して新規タスクの投入を禁止し、実行中のタスクをすべて終了させて、すべてのタスクの実行を待ってから「すべてのタスクが完了しました。」を出力します。
概要: スレッド プールは、スレッドのグループを事前に作成することで多数の同時タスクを処理します。これにより、リソースの使用率が向上し、スレッドの数と実行ステータスが管理および制御され、高同時実行でのタスク処理要件に適切に対処できます。環境。