直接回答ThreadPoolExecutor 有七个核心参数:corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(非核心线程空闲存活时间)、unit(时间单位)、workQueue(任务队列)、threadFactory(线程工厂)、rejectedExecutionHandler(拒绝策略)。

展开解析:任务提交流程——核心线程未满则直接创建线程执行;满了进队列排队;队列满且未达最大线程数则创建非核心线程;再满则触发拒绝策略。四种内置拒绝策略:

  • AbortPolicy(默认):抛 RejectedExecutionException
  • CallerRunsPolicy:由提交任务的调用线程自己执行,变相给上游降速;
  • DiscardPolicy:静默丢弃新任务;
  • DiscardOldestPolicy:丢弃队首最老任务再重试提交。

也可实现 RejectedExecutionHandler 自定义(如写日志、落盘补偿)。

易错点:用 LinkedBlockingQueue 无界队列时,maximumPoolSize 实际失效,任务堆积可能 OOM;Executors.newFixedThreadPool/newCachedThreadPool 正因队列或最大线程数隐患被《阿里巴巴 Java 开发手册》禁用。追问:如何监控线程池(活跃线程数、队列长度)、allowCoreThreadTimeOut 的作用。