ScheduleThreadPoolExecutor线程池分析

ScheduleThreadPoolExecutor作为定时任务线程池,核心线程数固定,可能导致任务堆积。本文分析其构造函数、DelayedWorkQueue机制,指出在任务繁重或执行时间长时需考虑调整核心线程数。
摘要由CSDN通过智能技术生成

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值