线程池任务处理流程图解
1. 线程池核心参数
| 参数名 |
描述 |
corePoolSize |
线程池中保持的核心线程数。即使空闲,这些线程也不会被销毁,除非设置了允许核心线程超时。 |
maxPoolSize |
线程池中允许的最大线程数。 |
keepAliveSeconds |
当线程数超过核心线程数时,多余的空闲线程等待新任务的时间(单位:秒)。 |
queueCapacity |
任务队列的容量,用于存储等待执行的任务。 |
| 拒绝策略 |
当任务无法被线程池处理时的应对方式。 |
2. 线程池的任务处理逻辑
以下是线程池在任务不断增加时的变化情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @startuml start :提交任务; if (核心线程未满?) then (是) :创建核心线程处理任务; else (否) if (任务队列未满?) then (是) :将任务加入队列; else (否) if (线程数未达最大值?) then (是) :创建非核心线程处理任务; else (否) :触发拒绝策略 (如 CallerRunsPolicy); endif endif endif :任务完成后检查空闲线程; if (空闲线程超时?) then (是) :回收空闲线程; else (否) :保持线程存活; endif stop @enduml
|
3. 图文并茂的线程池变化过程
3.1 初始阶段
- 描述:提交任务时,线程池会优先创建核心线程(
corePoolSize)来处理任务。
- 图示:
1 2 3 4
| @startuml :核心线程数 = corePoolSize; :任务队列 = 空; @enduml
|
3.2 核心线程满负荷
- 描述:当任务数量超过
corePoolSize 时,新提交的任务会被放入任务队列(LinkedBlockingQueue)。
- 图示:
1 2 3 4
| @startuml :核心线程数 = corePoolSize; :任务队列 = 非空 (任务数量 <= queueCapacity); @enduml
|
3.3 任务队列满
- 描述:当任务队列达到容量上限(
queueCapacity)时,线程池会继续创建新线程,直到线程数量达到 maxPoolSize。
- 图示:
1 2 3 4 5
| @startuml :核心线程数 = corePoolSize; :任务队列 = 满 (任务数量 > queueCapacity); :线程数 = corePoolSize < 线程数 <= maxPoolSize; @enduml
|
3.4 最大线程数满
- 描述:如果任务队列已满且线程数量达到
maxPoolSize,线程池将触发拒绝策略(CallerRunsPolicy)。
- 图示:
1 2 3 4 5 6
| @startuml :核心线程数 = corePoolSize; :任务队列 = 满; :线程数 = maxPoolSize; :拒绝策略 = CallerRunsPolicy (由调用线程执行任务); @enduml
|
3.5 空闲线程回收
- 描述:当线程池中的线程数量超过
corePoolSize 时,多余的空闲线程会在空闲时间超过 keepAliveSeconds 后被回收。
- 图示:
1 2 3 4 5
| @startuml :核心线程数 = corePoolSize; :任务队列 = 空或非满; :线程数 = corePoolSize (多余线程被回收); @enduml
|
4. 示例配置对比
| 线程池名称 |
corePoolSize |
maxPoolSize |
queueCapacity |
keepAliveSeconds |
fileSendThreadPool |
4 |
10 |
100 |
60 |
fileSendToolThreadPool |
动态 (CPU 核心数) |
动态 (CPU 核心数 × 4) |
动态 (CPU 核心数 × 10) |
60 |
5. 自定义线程工厂
CustomThreadFactory 是一个自定义线程工厂,用于创建带有特定命名规则的线程。
- 线程名称格式:
1
| Spring-<poolName>-<threadNumber>
|
- 示例:
1 2
| Spring-file-send-pool-1 Spring-file-send-pool-tool-1
|
6. 总结
通过以上分析可以看出:
- 线程池能够动态调整线程数量以适应任务量的变化。
- 不同的线程池配置可以根据具体业务需求进行优化。
- 结合任务队列和拒绝策略,线程池能够在高并发场景下保证系统的稳定性和性能。
`