线程池的核心参数与工作流程?

Java 并发面试题发布于

一、七大核心参数

  1. corePoolSize:核心线程数,即使空闲也保留。
  2. maximumPoolSize:最大线程数。
  3. keepAliveTime:非核心线程空闲存活时间。
  4. unit:时间单位。
  5. workQueue:阻塞队列。
  6. threadFactory:线程工厂。
  7. handler:拒绝策略。

二、工作流程

  1. 线程数 < corePoolSize → 创建核心线程执行。
  2. 线程数 ≥ corePoolSize → 任务入队。
  3. 队列满 → 创建非核心线程(直到 maxPoolSize)。
  4. 线程数 = maxPoolSize 且队列满 → 执行拒绝策略。

三、拒绝策略

  • AbortPolicy:抛异常(默认)
  • CallerRunsPolicy:调用者线程执行
  • DiscardPolicy:直接丢弃
  • DiscardOldestPolicy:丢弃队列最旧任务

四、为什么不建议用 Executors

FixedThreadPool/SingleThreadPool 队列无界可能 OOM;CachedThreadPool 线程数无界可能耗尽资源。应手动 new ThreadPoolExecutor。