MST
星途 面试题库

面试题:Java中ThreadPoolExecutor核心参数对线程池运行的影响

请阐述ThreadPoolExecutor的corePoolSize、maximumPoolSize和keepAliveTime这几个核心参数的含义,以及它们如何相互作用来影响线程池的运行和任务处理机制。
43.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  • corePoolSize:线程池的核心线程数。即使这些线程处于空闲状态,它们也不会被销毁,除非设置了allowCoreThreadTimeOuttrue。核心线程数决定了线程池初始时创建的线程数量,在任务提交时,会优先使用核心线程来处理任务。
  • maximumPoolSize:线程池允许的最大线程数。当任务队列已满且核心线程都在忙碌时,线程池会创建新的线程,直到线程数量达到maximumPoolSize。这个值限制了线程池最多能同时运行的线程数量。
  • keepAliveTime:当线程池中的线程数量超过corePoolSize时,多余的空闲线程(超过核心线程数的部分)在多长时间后会被销毁。也就是说,这些线程在空闲了keepAliveTime这么长的时间后,就会被终止,以减少资源消耗。

相互作用

  1. 当新任务提交到线程池时,首先会检查核心线程是否都在执行任务。如果有核心线程空闲,则直接分配给该核心线程执行任务。
  2. 如果所有核心线程都在忙碌,任务会被放入任务队列(如果有任务队列的话)。
  3. 当任务队列也满了,此时会判断当前线程池的线程数量是否小于maximumPoolSize。如果小于,就会创建新的线程(非核心线程)来处理任务。
  4. 当线程池中的线程数量超过corePoolSize,并且这些多余的线程(非核心线程)空闲时间达到keepAliveTime,这些线程就会被销毁,直到线程池中的线程数量回到corePoolSize。如果设置了allowCoreThreadTimeOuttrue,核心线程在空闲时间达到keepAliveTime后也会被销毁。