new ThreadPoolExecutor(
corePoolSize
int类型 核心线程数
maximumPoolSize
int类型 最大线程数
keepAliveTime
long类型 空闲时间
unit
TimeUnit类型 空闲时间的时间单位
workQueue
BlockingQueue类型 任务队列
handler
RejectedExecutionHandler类型 拒绝策略)
整个流程为:
1:首先根据corePoolSize核心线程数
的数量创建线程数量,当创建的线程达到核心线程数的数量时,
2:再有任务提交时,会放入任务队列中,
3:当任务队列也满了时,就会去创建大线程数maximumPoolSize
的数量,
4:当最大线程数也满了,还有任务时,执行拒绝策略RejectedExecutionHandler
corePoolSize:线程池核心线程的数量。核心线程就是如果不做特殊设置就永远不会停止的线程,即使没有任务执行了,核心线程也不会被回收掉。线程池总是会保证最少corePoolSize个线程存在。
maximumPoolSize
:线程池的最大线程数量,它表示线程池的最大线程数限制
keepAliveTime
:定义的空闲时间,当任务被消耗完毕后,高于corePoolSize的这部分线程在空闲多长时间会被关闭回收掉。
unit
:空闲的时间单位,可以指定为秒、分钟、小时等单位信息,与keepAliveTime共同使用,共同定义空闲时间。
workQueue
:任务队列,它是一个队列结构的容器。正常情况下,任务被提交到线程池之后,会立即被核心线程所执行,但是当核心线程都处于忙碌状态的时候,没有核心线程去执行这个任务,那么这个任务会被暂时提交到任务队列中等待核心线程空闲下来再去执行!当任务队列被放满了,比如一个长度为 10 的队列,里面已经放了 10 个任务,那么第 11 个任务就会触发 maximumPoolSize 线程的执行。
threadFactory
:线程工厂,主要用于控制线程池以何种方式去产生一个新线程,比如去设置线程池中产生线程的名字、优先级、是不是守护线程等这些信息。
handler
:拒绝策略,这个参数就是线程池在处理突发大量任务的最后的 兜底手段。当 corePoolSize、maximumPoolSize、workQueue 全部都被任务填满了之后,线程池会认为已经无力再执行后续提交的任务,此时对于后续的任务会触发拒绝策略来拒绝任务(有关于拒绝策略的知识点会在后续详细说明)。