线程池参数调优实战
📺 配套视频
📝 知识点总结
线程池核心参数回顾
| 参数 | 作用 | 调优建议 |
|---|---|---|
| corePoolSize | 核心线程数 | CPU 密集型:N+1,IO 密集型:2N |
| maximumPoolSize | 最大线程数 | 根据压测结果调整,不要拍脑袋 |
| workQueue | 任务队列 | 有界队列,防止 OOM |
| keepAliveTime | 非核心线程存活时间 | 根据流量波动周期设置 |
为什么不能用 Executors 创建线程池
newFixedThreadPool:LinkedBlockingQueue 无界队列,任务堆积导致 OOMnewCachedThreadPool:maximumPoolSize 为 Integer.MAX_VALUE,线程数爆炸newSingleThreadExecutor:同样是无界队列问题
生产环境推荐配置
ThreadPoolExecutor executor = new ThreadPoolExecutor(
8, // 核心线程数
16, // 最大线程数
60, TimeUnit.SECONDS, // 非核心线程存活60秒
new LinkedBlockingQueue<>(1000), // 有界队列,容量1000
new ThreadFactoryBuilder().setNameFormat("biz-pool-%d").build(),
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略:调用者执行
);