Java 面试题:线程池参数、流程与 Executors 风险

一、七大参数

ThreadPoolExecutor(core, max, keepAlive, unit, queue, threadFactory, handler):

参数 含义
corePoolSize 核心线程数
maximumPoolSize 最大线程数
keepAliveTime 空闲线程回收时间
workQueue 任务队列(用有界!)
handler 拒绝策略

二、提交流程

核心满 → 入队列 → 队列满 → 开到最大线程 → 仍满 → 拒绝。拒绝策略:Abort(抛异常)/CallerRuns(调用者跑)/DiscardOldest/Discard。

三、Executors 的坑

  • newFixedThreadPool/newSingleThread:无界 LinkedBlockingQueue,任务堆积 OOM;
  • newCachedThreadPool:最大线程 Integer.MAX_VALUE,线程爆炸;
  • 生产务必手动 new ThreadPoolExecutor + 有界队列 + 合理拒绝策略。

四、参数经验

CPU 密集:core ≈ 核数;IO 密集:core 可放大(如 2×核数)。异常处理:submit 吞异常,用 execute 或 Future.get() 或重写 afterExecute 捕获。