并发编程:线程池参数、执行流程与调优
掌握线程池七大参数、任务提交后的执行链路、四种拒绝策略,以及核心/最大线程数的合理设置。
本节你将能
画出任务提交后的执行流程,解释为什么不建议用 Executors 快速创建线程池。
核心要点
- 核心参数:corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler。
- 流程:核心线程满 → 入队列 → 队列满 → 开非核心线程 → 再满触发拒绝策略。
- 拒绝策略:Abort(抛异常)、CallerRuns(调用者执行)、Discard、DiscardOldest。
- Executors.newFixedThreadPool 用无界队列、newCachedThreadPool 最大线程数极大,都可能 OOM。
调优经验
CPU 密集型≈核数+1;IO 密集型可更高(核数/(1-阻塞系数));需结合压测与队列堆积监控调整。
面试连招
追问:线程池里的线程异常会怎样?如何优雅关闭?submit 与 execute 的区别?