ScheduleThreadPoolExecutor是官方推荐的取代Timer作定时任务的线程池,在研究ScheduleThreadPoolExecutor过程中发现此线程池无论什么时候都只会有核心线程数coreSize个线程在工作。
这样就有个问题,如果任务较为繁重的情况下,或者单个任务执行时间较长的情况下,是否需要调整coreSize的大小。
先从ScheduleThreadPoolExecutor的构造函数出发:
只说最复杂构造函数了,其参数为corePoolSize核心线程数,threadFactory线程工厂,handler拒绝处理策略。构造函数中调用了父类ThreadPoolExecutor的构造函数,传入的参数中第二个参数为线程池最大线程数Integer.MAX_VALUE,第三个参数线程保持时间为0,第五个参数为任务队列DelayedWorkQueue,这几个参数为默认传入参数。
public ScheduledThreadPoolExecutor(int corePoolSize,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
new DelayedWorkQueue(), threadFactory, handler);
}
从以上构造函数看,ScheduleThreadPoolExecutor的核心线程数可由构造函数传入,最大线程数为Integer的最大值,任务队列为DelayedWorkQueue。