Java面试题更新 2026-08-03

在字节互娱后端一面的面试中,请描述Java中线程池的核心参数及其作用,并说明如何合理配置线程池大小。

考察说明

考查对Java线程池核心参数的理解及实际配置能力。

回答思路

  1. 【回答框架 1】线程池核心参数包括corePoolSize、maximumPoolSize、keepAliveTime、workQueue和ThreadFactory等,corePoolSize是常驻线程数,maximumPoolSize是最大线程数,keepAliveTime是非核心线程空闲存活时间。
  2. 【回答框架 2】任务提交时,若线程数小于corePoolSize则新建线程;若大于corePoolSize且队列未满则入队;若队列已满且线程数小于maximumPoolSize则新建非核心线程;否则执行拒绝策略。
  3. 【回答框架 3】配置线程池大小需考虑任务类型:CPU密集型任务建议线程数接近Ncpu,IO密集型任务可适当增加,常用估算公式为Ncpu乘以(1加等待时间与计算时间之比),但最终需结合资源上限和压测调整。
  4. 【回答框架 4】拒绝策略包括AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy,需根据业务对任务丢失的容忍度选择。
  5. 【关键点 1】corePoolSize和maximumPoolSize决定线程数量伸缩范围。
  6. 【关键点 2】workQueue类型影响任务排队行为,如有界队列和无界队列差异。
  7. 【关键点 3】线程池配置需结合任务特性与系统资源,公式仅为初始估算。