202108100722 - 为什么使用线程池
每个任务创建一个线程有什么问题?
- 线程的创建和销毁对系统开销(时间、内存)太大,任务越多,开销越大
- 过多的线程导致更多的上下文切换,影响系统的稳定性。
线程池如何解决上述问题?
- 线程池创建一些线程,一直处于工作状态
- 根据需要创建线程,限制线程的数量
使用线程池的好处
第一点,线程池可以解决线程生命周期的系统开销问题,同时还可以加快响应速度。因为线程池中的线程是可以复用的,我们只用少量的线程去执行大量的任务,这就大大减小了线程生命周期的开销。而且线程通常不是等接到任务后再临时创建,而是已经创建好时刻准备执行任务,这样就消除了线程创建所带来的延迟,提升了响应速度,增强了用户体验。
第二点,线程池可以统筹内存和 CPU 的使用,避免资源使用不当。线程池会根据配置和任务数量灵活地控制线程数量,不够的时候就创建,太多的时候就回收,避免线程过多导致内存溢出,或线程太少导致 CPU 资源浪费,达到了一个完美的平衡。
第三点,线程池可以统一管理资源。比如线程池可以统一管理任务队列和线程,可以统一开始或结束任务,比单个线程逐一处理任务要更方便、更易于管理,同时也有利于数据统计,比如我们可以很方便地统计出已经执行过的任务的数量。
使用线程池调用执行任务后,不会自动退出?
public static void main(String[] args) {
// AtomicInteger a = new AtomicInteger();
ExecutorService service = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10000; i++) {
service.execute(new Task());
System.out.println(i);
}
System.out.println(Thread.currentThread().getName());
}

浙公网安备 33010602011771号