MST
星途 面试题库

面试题:Java中ThreadPoolExecutor的核心参数有哪些及作用

请详细阐述Java中ThreadPoolExecutor构造函数的核心参数,如corePoolSize、maximumPoolSize、keepAliveTime、unit和workQueue等,说明它们各自在线程池运行机制中所起的作用。
19.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. corePoolSize
    • 作用:线程池中核心线程数的大小。核心线程会一直存活,即使处于闲置状态也不会被销毁(除非设置了 allowCoreThreadTimeOuttrue)。当新任务提交到线程池时,如果当前线程池中的线程数量小于 corePoolSize,那么会创建新的线程来执行任务,而不是将任务放入队列。
  2. maximumPoolSize
    • 作用:线程池中允许的最大线程数。当任务不断提交,并且 workQueue 已满,同时当前线程数小于 maximumPoolSize 时,线程池会创建新的非核心线程来执行任务。这个值必须大于等于 corePoolSize
  3. keepAliveTime
    • 作用:当线程池中的线程数量超过 corePoolSize 时,多余的非核心线程如果在指定时间(keepAliveTime)内一直处于闲置状态,就会被销毁。此参数定义了这些非核心线程的存活时间。
  4. unit
    • 作用keepAliveTime 的时间单位。它是一个 TimeUnit 类型的枚举,比如 TimeUnit.SECONDS(秒)、TimeUnit.MILLISECONDS(毫秒)等,用于指定 keepAliveTime 的时间粒度。
  5. workQueue
    • 作用:用于存放待执行任务的阻塞队列。当线程池中的线程数达到 corePoolSize 后,新提交的任务会被放入这个队列中等待执行。常见的队列类型有 ArrayBlockingQueue(有界队列)、LinkedBlockingQueue(无界队列,Integer.MAX_VALUE 大小,可近似看作无界)、SynchronousQueue(不存储元素的队列,每个插入操作必须等待另一个线程的移除操作)等。不同的队列类型会影响线程池的性能和任务处理策略。