面试题答案
一键面试- corePoolSize:线程池的核心线程数。即使这些线程处于空闲状态,它们也不会被销毁,除非设置了
allowCoreThreadTimeOut
为true
。核心线程数决定了线程池初始时创建的线程数量,在任务提交时,会优先使用核心线程来处理任务。 - maximumPoolSize:线程池允许的最大线程数。当任务队列已满且核心线程都在忙碌时,线程池会创建新的线程,直到线程数量达到
maximumPoolSize
。这个值限制了线程池最多能同时运行的线程数量。 - keepAliveTime:当线程池中的线程数量超过
corePoolSize
时,多余的空闲线程(超过核心线程数的部分)在多长时间后会被销毁。也就是说,这些线程在空闲了keepAliveTime
这么长的时间后,就会被终止,以减少资源消耗。
相互作用:
- 当新任务提交到线程池时,首先会检查核心线程是否都在执行任务。如果有核心线程空闲,则直接分配给该核心线程执行任务。
- 如果所有核心线程都在忙碌,任务会被放入任务队列(如果有任务队列的话)。
- 当任务队列也满了,此时会判断当前线程池的线程数量是否小于
maximumPoolSize
。如果小于,就会创建新的线程(非核心线程)来处理任务。 - 当线程池中的线程数量超过
corePoolSize
,并且这些多余的线程(非核心线程)空闲时间达到keepAliveTime
,这些线程就会被销毁,直到线程池中的线程数量回到corePoolSize
。如果设置了allowCoreThreadTimeOut
为true
,核心线程在空闲时间达到keepAliveTime
后也会被销毁。