线程池

线程池

老葛曾讲过: 2025.7.1

现在再次加强,线程池这一概念 2025.8.23

线程池 七大参数

参数 作用 规则 类比
corePoolSize 核心线程数 ≥0 餐厅正式员工
maximumPoolSize 最大线程数 ≥核心线程数 餐厅最大容纳人数
keepAliveTime 空闲线程存活时间 ≥0(配合unit使用) 临时工解雇等待时间
unit 空闲时间单位 TimeUnit枚举 时间单位(秒/分钟)
workQueue 阻塞队列 不能为null 顾客等候区
threadFactory 线程创建工厂 不能为null HR招聘流程
handler 拒绝策略 不能为null 客满时的应对方案

执行流程

flowchart LR A([提交任务]) --> B{核心线程是否满} B --未满--> C[使用核心线程执行] B --已满--> D{队列是否满} D --未满--> E[任务入队等待] D --已满--> F{最大线程是否满} F --未满--> G([创建临时线程执行]) F --已满--> H([触发拒绝策略])

拒绝策略

策略名称 行为描述 特点
AbortPolicy 丢弃任务,
抛出 RejectedExecutionException 异常
默认策略,强制中断流程
DiscardPolicy 直接静默丢弃新提交的任务 无任何通知
DiscardOldestPolicy 丢弃队列中最旧的任务,重试提交新任务 可能丢失等待时间最长的任务
CallerRunsPolicy 将任务退回给调用者线程执行 降低新任务提交速度

线程工厂

JDK提供的线程工厂,存在一些潜在风险,体现在资源控制不当可能导致的系统问题。
具体分析如下:

// 阻塞队列为Integer.MAX_VALUE
Executors.newFixedThreadPool(100);
Executors.newSingleThreadExecutor();
// 最大线程数为Integer.MAX_VALUE
Executors.newCachedThreadPool(new ThreadPoolTaskExecutor().getThreadPoolExecutor().getThreadFactory());
Executors.newScheduledThreadPool(1);

所以实际开发环境中我们都是手动创建并且显式配置核心参数✌。

posted @ 2025-08-23 19:57  Breezy_space  阅读(9)  评论(0)    收藏  举报