线程池

作者: 一叶知秋_zgx | 来源:发表于2020-07-07 10:51 被阅读0次

    为什么要使用线程池?

    随着线程数量不断的增多,会导致系统资源占用和内存占用大,此时的线程需要一个类来统一管理,有次诞生了线程池。
    线程池有两个解决思路。
    首先,针对反复创建线程开销大的问题,线程池用一些固定的线程一直保持工作状态并反复执行任务。
    其次,针对过多线程占用太多内存资源的问题,解决思路更直接,线程池会根据需要创建线程,控制线程的总数量,避免占用过多内存资源。

    /** 
    * 描述:     用固定线程数的线程池执行10000个任务 
    */ 
    public class ThreadPoolDemo { 
     
        public static void main(String[] args) { 
            ExecutorService service = Executors.newFixedThreadPool(5);
            for (int i = 0; i < 10000; i++) { 
                service.execute(new Task());
            } 
        System.out.println(Thread.currentThread().getName());
        } 
     
        static class Task implements Runnable { 
     
            public void run() { 
                System.out.println("Thread Name: " + Thread.currentThread().getName());
            } 
        } 
    }
    
    

    使用线程池比手动创建线程主要有三点好处。

    第一点,线程池可以解决线程生命周期的系统开销问题,同时还可以加快响应速度。因为线程池中的线程是可以复用的,我们只用少量的线程去执行大量的任务,这就大大减小了线程生命周期的开销。而且线程通常不是等接到任务后再临时创建,而是已经创建好时刻准备执行任务,这样就消除了线程创建所带来的延迟,提升了响应速度,增强了用户体验。

    第二点,线程池可以统筹内存和 CPU 的使用,避免资源使用不当。线程池会根据配置和任务数量灵活地控制线程数量,不够的时候就创建,太多的时候就回收,避免线程过多导致内存溢出,或线程太少导致 CPU 资源浪费,达到了一个完美的平衡。

    第三点,线程池可以统一管理资源。比如线程池可以统一管理任务队列和线程,可以统一开始或结束任务,比单个线程逐一处理任务要更方便、更易于管理,同时也有利于数据统计,比如我们可以很方便地统计出已经执行过的任务的数量。

    相关文章

      网友评论

          本文标题:线程池

          本文链接:https://www.haomeiwen.com/subject/clcaqktx.html