3、线程池的几个重要参数介绍
底层实现源码,都写了五大参数,但一共有七大参数
3.1、七大参数
3.1.1、corePoolSize
:线程池中的常驻核心线程数。
- 创建了线程池之后,当有请求任务来之后,就会安排线程池中的线程去执行任务,默认活动窗口数。
- 当线程超出
corePoolSize
以后,会把到达的任务放在缓存队列。
3.1.2、maximumPoolSize
:线程池能够同时执行的最大线程数,最大可扩容窗口数。
3.1.3、keepAliveTime
:多余的空闲线程的存活时间。
3.1.4、unit
:keepAliveTime
的时间单位
3.1.5、workQueue
:任务队列,被提交但未被执行的任务。
- 阻塞队列,类似于候客区。
3.1.6、threadFactory
:表示生成线程池中工作线程的线程工厂,用于创建线程,一般使用默认。即培训窗口职员上岗的人。
3.1.7、handler
:拒绝策略,表示当队列中满了,并且工作线程大于等于线程池的最大线程数(maximumPoolSize
)
- 人太多了,保安得撵人了,不让进了。
09-状态模式、10-策略模式 - 简书 (jianshu.com)
4、说一说线程池的底层工作原理
- 首先,来了直接使用corePoolSize
- 后续又来了新请求,会进入阻塞队列排队
- 阻塞队列超出一定数量,创建非核心线程立刻执行这个任务,直至正在运行的线程数大于等于maximumPool
- 正在运行的线程数大于等于maximumPool,再有请求进入,启动拒绝策略
- 额外开设窗口关闭,缩回核心线程数
当一个线程无事可做超过一定的时间keepAliveTime
,线程会进行判断:如果当前运行的线程数大于corePoolSize
,那么这个线程就被停掉
所以最终,当所有任务完成一段时间后,线程池最终会收缩到corePoolSize
状态 | 拒绝策略 | 描述 |
---|---|---|
默认 | AbortPolicy | 。。。 |