202108100722 - 为什么使用线程池

每个任务创建一个线程有什么问题?

  1. 线程的创建和销毁对系统开销(时间、内存)太大,任务越多,开销越大
  2. 过多的线程导致更多的上下文切换,影响系统的稳定性。

线程池如何解决上述问题?

  1. 线程池创建一些线程,一直处于工作状态
  2. 根据需要创建线程,限制线程的数量

使用线程池的好处
第一点,线程池可以解决线程生命周期的系统开销问题,同时还可以加快响应速度。因为线程池中的线程是可以复用的,我们只用少量的线程去执行大量的任务,这就大大减小了线程生命周期的开销。而且线程通常不是等接到任务后再临时创建,而是已经创建好时刻准备执行任务,这样就消除了线程创建所带来的延迟,提升了响应速度,增强了用户体验。
第二点,线程池可以统筹内存和 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());  
}
posted @ 2025-03-19 22:31  钱塘江畔  阅读(17)  评论(0)    收藏  举报