Java面试题更新 2026-08-05

在阿里校招Java一面的场景下,请描述Java中线程池的核心参数及其作用,并解释线程池的工作流程。

后端开发技术原理Java

考察说明

考查对Java线程池参数理解及任务处理流程的掌握程度。

回答思路

  1. 【回答框架 1】线程池核心参数包括corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory和拒绝策略。corePoolSize是常驻核心线程数,maximumPoolSize是最大线程数,keepAliveTime是空闲线程存活时间,workQueue是任务队列,threadFactory用于创建线程,拒绝策略处理任务无法执行的情况。
  2. 【回答框架 2】工作流程为:提交任务时,若运行线程数小于corePoolSize,则创建新线程执行;若等于或大于corePoolSize,则尝试放入workQueue;若队列已满且线程数小于maximumPoolSize,则创建新线程;若已达最大值,则执行拒绝策略。
  3. 【回答框架 3】常见拒绝策略有AbortPolicy(抛异常)、CallerRunsPolicy(调用者执行)、DiscardPolicy(丢弃)、DiscardOldestPolicy(丢弃最旧任务)。实际中常自定义策略以记录或降级。
  4. 【回答框架 4】线程池大小估算公式为Ncpu × (1 + W/C),其中W/C为等待时间与计算时间比,但最终需根据压测、CPU和延迟目标调整。
  5. 【关键点 1】核心参数corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory和拒绝策略共同决定线程池行为。
  6. 【关键点 2】任务先占用核心线程,再入队列,再扩展至最大线程,最后触发拒绝策略。
  7. 【关键点 3】拒绝策略默认AbortPolicy,实际项目中常自定义策略。
  8. 【易错点 1】不要混淆corePoolSize与maximumPoolSize,线程数优先由核心数决定。
  9. 【易错点 2】线程池大小估算公式只是初始值,需结合压测调整。
  10. 【易错点 3】队列类型(有界/无界)会极大影响任务排队与拒绝行为,理解时需区分。