ThreadPool
(线程池)是一种管理多个线程的技术,通过预先创建一组线程并重复使用它们来执行任务,从而减少线程创建和销毁的开销,提高系统性能和资源利用率。
常见的线程池类型包括:
当你使用ThreadPool
时,程序在完成后等待关闭,通常是因为线程池中的线程没有正确关闭。线程池中的线程在执行完任务后,如果没有显式关闭,会继续等待新的任务,导致程序无法正常退出。
以下是一个示例代码,展示如何正确关闭线程池:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务
for (int i = 0; i < 10; i++) {
final int taskNumber = i;
executorService.submit(() -> {
System.out.println("Task " + taskNumber + " is running on thread " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Task " + taskNumber + " is completed");
});
}
// 关闭线程池
executorService.shutdown();
try {
// 等待所有任务完成,最多等待10秒
if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
// 如果超时,强制关闭
executorService.shutdownNow();
}
} catch (InterruptedException e) {
// 如果等待过程中被中断,强制关闭
executorService.shutdownNow();
}
System.out.println("Main thread exiting");
}
}
通过上述方法,你可以确保线程池在任务完成后正确关闭,避免程序等待关闭的问题。
领取专属 10元无门槛券
手把手带您无忧上云