MST

星途 面试题库

面试题:Java线程池执行流程中核心线程和非核心线程的区别

请阐述在Java线程池执行流程里,核心线程和非核心线程在创建时机、存活策略等方面有哪些区别?
18.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

创建时机

  • 核心线程:当有任务提交到线程池时,只要核心线程数量未达到设定的核心线程数(corePoolSize),就会优先创建核心线程来处理任务。即使当前有空闲的核心线程,新任务也会优先分配给空闲核心线程,只有核心线程数已满才考虑后续策略。
  • 非核心线程:当核心线程数已满且工作队列也已满时,才会创建非核心线程(前提是当前线程总数未达到最大线程数 maximumPoolSize)。

存活策略

  • 核心线程:默认情况下,核心线程会一直存活,不会因为长时间闲置而被销毁。不过,可以通过设置 allowCoreThreadTimeOut(true) 开启核心线程的存活时间限制,此时核心线程在闲置时间超过 keepAliveTime 时,也会被销毁。
  • 非核心线程:非核心线程在闲置时间超过 keepAliveTime 时,就会被销毁。这个机制保证了在任务量减少时,线程池能够自动回收多余的线程资源,避免资源浪费。