线程池ThreadPoolExecutor实现原理 - omigaw/spring- GitHub Wiki

1. 为什么要使用线程池

  • 降低资源消耗 :通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗;
  • 提升系统响应速度 :通过复用线程,省去创建线程的过程,因此整体上提升了系统的响应速度;
  • 提高线程的可管理性 : 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此,需要使用线程池来管理线程。

2. 线程池的工作原理

提交者: 提交任务 线程池: 核心线程池是否已满 ——————> 阻塞队列是否已满 --------> 线程池是否已满——————>按饱和策略进行处理。

执行 : 创建线程执行当前任务 将任务存储在队列中 创建线程执行任务

3.线程池的创建

创建线程池主要是 ThreadPoolExecutor 类来完成,ThreadPoolExecutor的有许多重载的构造方法,通过参数最多的构造方法来理解创建线程池有哪些需要配置的参数。ThreadPoolExecutor的构造方法为: ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) threadFactory: 创建线程的工程类。可以通过指定线程工厂为每个创建出来的线程设置更有意义的名字,如果出现并发问题,也方便查找问题原因。

4.如何合理配置线程池参数。

1.任务的性质: CPU密集型任务,IO密集型任务和混合型任务。 2.任务的优先级: 高、中和低。 3.任务的执行时间:长、中和短。 4.任务的依赖性:是否依赖其他系统资源,如数据库连接。

⚠️ **GitHub.com Fallback** ⚠️