MST

星途 面试题库

面试题:Java线程池创建线程处理任务过程中的常见参数及作用

请详细阐述Java线程池中如corePoolSize、maximumPoolSize、keepAliveTime等参数在线程池创建线程处理任务过程中各自起到什么作用?
32.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. corePoolSize
    • 定义:线程池中的核心线程数。
    • 作用:当有任务提交到线程池时,线程池会优先创建线程来执行任务,直到线程数量达到corePoolSize。即使这些核心线程处于空闲状态,它们也不会被销毁,除非设置了allowCoreThreadTimeOut(true)。例如,在一个Web服务器应用中,核心线程可以一直存在来处理持续到来的HTTP请求,这样可以避免频繁创建和销毁线程带来的开销。
  2. maximumPoolSize
    • 定义:线程池中允许的最大线程数。
    • 作用:当任务队列已满,并且线程数量小于maximumPoolSize时,线程池会继续创建新的线程来处理任务,直到线程数达到maximumPoolSize。例如,在一个批量数据处理的场景中,如果突然有大量的数据需要处理,超过了核心线程数和任务队列的承载能力,就会创建更多线程,最多达到maximumPoolSize,以尽快处理完任务。但如果线程数达到maximumPoolSize后,任务队列仍满,就会按照饱和策略处理新任务。
  3. keepAliveTime
    • 定义:当线程池中的线程数量超过corePoolSize时,多余的空闲线程的存活时间。
    • 作用:当线程池中的线程数量大于corePoolSize时,那些空闲时间超过keepAliveTime的线程会被销毁,直到线程数量减少到corePoolSize。这有助于在任务处理量下降时,自动回收多余的线程资源,避免资源浪费。比如在一个电商系统的后台任务处理线程池中,促销活动期间任务量很大,线程数可能会超过核心线程数,但活动结束后,多余的空闲线程在keepAliveTime时间后就会被销毁。