SpringBoot 整合线程池及各参数详解

如题所述

第1个回答  2022-06-08

ThreadPoolConfig

ThreadController

AsyncService

AsyncServiceImpl

application.yaml

运行结果

参数默认值及含义

对照源码解析,可以得出以下结论:

1.如果线程池中线程数量 < 核心线程数,新建一个线程执行任务;

2.如果线程池中线程数量 >= 核心线程数,则将任务放入任务队列

3.如果线程池中线程数量 >= 核心线程数 且 < maxPoolSize,且任务队列满了,则创建新的线程;

4.如果线程池中线程数量 > 核心线程数,当线程空闲时间超过了keepalive时,则会销毁线程;由此可见线程池的队列如果是无界队列,那么设置线程池最大数量是无效的;

5.如果线程池中的任务队列满了,而且线程数达到了maxPoolSize,并且没有空闲的线程可以执行新的任务,这时候再提交任务就会执行拒绝策略

拒绝策略详解

拒绝策略RejectedExecutionHandler分为以下5种

结论

这几种策略没有好坏之分,只是适用不同场景,具体哪种合适根据具体场景和业务需要选择,如果需要特殊处理就自己定义好了。

相似回答