跳到主要内容

线程池参数调优实战

📺 配套视频

📝 知识点总结

线程池核心参数回顾

参数作用调优建议
corePoolSize核心线程数CPU 密集型:N+1,IO 密集型:2N
maximumPoolSize最大线程数根据压测结果调整,不要拍脑袋
workQueue任务队列有界队列,防止 OOM
keepAliveTime非核心线程存活时间根据流量波动周期设置

为什么不能用 Executors 创建线程池

  • newFixedThreadPool:LinkedBlockingQueue 无界队列,任务堆积导致 OOM
  • newCachedThreadPool: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() // 拒绝策略:调用者执行
);

🔗 延伸阅读