ThreadPoolExecutor 的七个参数
在 ThreadPoolExecutor 中,有七个重要的参数需要了解,源代码如下:
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)图示如下:

int corePoolSize
表示的是核心线程数,表示的是线程池中最多会保留的线程数。
在创建线程池时,这些核心线程不会被立马创建,而是等待有任务需要执行时才会创建。
int maximumPoolSize
表示线程池中的最大线程数。
线程池中,不仅仅有核心线程,还有救急线程,即任务进来后,核心线程处理不过来时才会创建救急线程,救急线程的数目 = maximumPoolSize - corePoolSize。
long keepAliveTime
表示救急线程的生存时间,在这段时间内没有任务需要救急线程执行时,究极线程就会被释放。
TimeUnit unit
表示救急线程生存时间的单位,可以是秒、毫秒等。
BlockingQueue<Runnable> workQueue
表示工作队列,当任务进入线程池时,会先交给核心线程执行,当没有空闲的核心线程来执行这个任务时,就会将该任务存入工作队列中。
当队列满时依然有新的任务进来,这时就会创建救急线程来执行,当救急线程的数目达到最大值时并且没有空闲的救急线程来执行该任务时,就会根据后面的 handler 参数来决定如何处理该任务。
ThreadFactory threadFactory
表示线程工厂,可以定制线程对象的创建,例如设置线程名字、是否是守护线程等。
RejectedExecutionHandler handler
表示拒接策略,当线程池中没有空闲的核心线程、救急线程,并且工作队列已经满了,此时依然有新的任务进来,这时就需要拒绝策略来判断如何处理该任务。
AbortPolicy
直接抛出异常
CallerRunsPolicy
由调用者执行该任务
DiscardPolicy
丢弃该任务
DiscardOldestPolicy
丢弃最早进入工作队列的任务,并将新的任务存入工作队列中
