Java面试题更新 2026-08-03

在Java线程池的运行期间,是否可以动态调整核心线程数?如果可以,具体的调整方法是什么?

考察说明

考察对ThreadPoolExecutor核心参数动态调整机制的理解及API掌握情况。

回答思路

  1. 【回答框架 1】ThreadPoolExecutor提供了setCorePoolSize方法,用于在运行时调整核心线程数。该方法会更新corePoolSize变量,并可能触发线程数的调整。
  2. 【回答框架 2】当新核心线程数小于当前工作线程数时,线程池会中断多余的空闲线程,使其逐渐退出;如果新值大于当前值,则会创建新线程直到达到新核心线程数,前提是任务队列未满或存在待处理任务。
  3. 【回答框架 3】调整核心线程数时,需考虑线程池状态。若线程池已关闭,则调整无效。通常建议在配置管理或动态调优时使用,例如根据负载变化调整。
  4. 【回答框架 4】实际操作中,可通过自定义线程池实例调用setCorePoolSize方法,或通过管理接口(如Spring的ThreadPoolTaskExecutor)进行设置。调整后,可通过getCorePoolSize验证结果。
  5. 【关键点 1】setCorePoolSize可动态调整核心线程数,影响线程创建和回收。
  6. 【关键点 2】调整后不会立即销毁所有多余线程,仅中断空闲线程。
  7. 【关键点 3】线程池关闭后调整无效,需结合状态管理。
  8. 【易错点 1】只调整核心线程数而不关注队列和最大线程数,可能导致资源利用率不足或过高。
  9. 【易错点 2】频繁调整可能引发线程创建销毁开销,需平衡动态性与性能。