Loading

线程池

池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。

线程池的好处:降低资源的消耗,提高响应速度,提高线程的可管理性。

 

如何创建线程池?

     1.通过构造方法实现

     2.通过Executor框架的工具类Executors来实现。

线程池原理:我们在代码中模拟了 10 个任务,我们配置的核心线程数为 5 、等待队列容量为 100 ,所以每次只可能存在 5 个任务同时执行,剩下的 5 个任务会被放到等待队列中去。当前的5个任务中如果有任务被执行完了,线程池就会去拿新的任务执行。

线程池在项目中应用的场景:线程池一般用于执行多个不相关联的耗时任务,没有多线程的情况下,任务顺序执行,使用了线程池的话可让多个不相关联的任务同时执行。

如何使用线程池?

       1.使用线程池的工厂类Executors里边提供的静态方法newDixedThreadPool生产一个指定线程数量的线程池

       2.创建一个类,实现Runnable接口,重写run方法,设置线程任务

       3.调用ExecutorService中的方法submit,传递线程任务,开启线程,执行run方法

       4.调用ExecutorService中的方法shutdown销毁此线程。

为什么要使用线程池创建多线程?

我们知道不用线程池的话,每个线程都要通过 new Thread(xxRunnable).start()的方 式来创建并运行一个线程,线程少的话这不会是问题,而真实环境可能会开启多个线程让系统和程序达到最佳效率,当线程数达到一定数量就会耗尽系统的 CPU 和 内存资源,也会造成 GC频繁收集和停顿,因为每次创建和销毁一个线程都是要消 耗系统资源的,如果为每个任务都创建线程这无疑是一个很大的性能瓶颈。所以, 线程池中的线程复用极大节省了系统资源,当线程一段时间不再有任务处理时它也会自动销毁,而不会长驻内存。

ThreadPool 优点

  • 减少了创建和销毁线程的次数,每个⼯作线程都可以被重复利⽤,可执⾏多个任务

  • 可以根据系统的承受能⼒,调整线程池中⼯作线线程的数⽬,防⽌因为因为消耗过多的内存,⽽把服务器累趴下(每个线程需要⼤约1MB内存,线程开的越多,消耗的内存也就越⼤,最后死机)

    1. 减少在创建和销毁线程上所花的时间以及系统资源的开销

    2. 如不使⽤线程池,有可能造成系统创建⼤量线程⽽导致消耗完系统内存

posted @ 2022-03-17 11:27  远乡人  阅读(51)  评论(0编辑  收藏  举报