美文网首页
Spring的线程池ThredPoolTaskExcutor

Spring的线程池ThredPoolTaskExcutor

作者: Mango_yes | 来源:发表于2017-12-07 09:42 被阅读0次

ThreadPoolTaskExecutor是一个spring的线程池技术,它是使用jdk中的java.util.concurrent.ThreadPoolExecutor进行实现。

ThreadPoolTaskExecutor的参数:

int corePoolSize:线程池维护线程的最小数量.

int maximumPoolSize:线程池维护线程的最大数量.

long keepAliveTime:空闲线程的存活时间.

TimeUnit unit: 时间单位,现有纳秒,微秒,毫秒,秒枚举值.

BlockingQueue workQueue:持有等待执行的任务队列.

RejectedExecutionHandler handler: 用来拒绝一个任务的执行,有两种情况会发生这种情况。

一是在execute方法中若addIfUnderMaximumPoolSize(command)为false,即线程池已经饱和;

二是在execute方法中, 发现runState!=RUNNING || poolSize == 0,即已经shutdown,就调用ensureQueuedTaskHandled(Runnable command),在该方法中有可能调用reject。

ThredPoolTaskExcutor的处理流程:

当池子大小小于corePoolSize,就新建线程,并处理请求

当池子大小等于corePoolSize,把请求放入workQueue中,池子里的空闲线程就去workQueue中取任务并处理

当workQueue放不下任务时,就新建线程入池,并处理请求,如果池子大小撑到了maximumPoolSize,就用RejectedExecutionHandler来做拒绝处理

当池子的线程数大于corePoolSize时,多余的线程会等待keepAliveTime长时间,如果无请求可处理就自行销毁

其会优先创建  CorePoolSiz 线程, 当继续增加线程时,先放入Queue中,当 CorePoolSiz  和 Queue 都满的时候,就增加创建新线程,当线程达到MaxPoolSize的时候,就会抛出错 误 org.springframework.core.task.TaskRejectedException

另外MaxPoolSize的设定如果比系统支持的线程数还要大时,会抛出java.lang.OutOfMemoryError: unable to create new native thread 异常。

springBoot中使用如下:

相关文章

网友评论

      本文标题:Spring的线程池ThredPoolTaskExcutor

      本文链接:https://www.haomeiwen.com/subject/doarixtx.html