面试题答案
一键面试corePoolSize参数含义
corePoolSize
指线程池中保持活动状态的最小线程数。即使这些线程处于空闲状态,它们也不会被销毁,除非设置了allowCoreThreadTimeOut
为true
。
任务提交时对线程池行为的影响
- 当有新任务提交到线程池时,如果当前线程池中的线程数量小于
corePoolSize
,线程池会创建新的线程来处理任务,无论是否有空闲线程。 - 若当前线程池中的线程数量已经达到或超过
corePoolSize
,新任务会被放入任务队列(如果任务队列有容量),等待空闲线程来处理。
需要调整该参数的场景
- 任务负载较轻且持续:如果应用程序处理的任务是轻量级且持续不断的,适当增加
corePoolSize
可以避免频繁创建和销毁线程的开销,提高性能。例如,一个持续接收并处理小数据量网络请求的服务器。 - 任务负载较重且突发:若任务负载较重且有突发高峰,过小的
corePoolSize
可能导致任务队列迅速填满,进而触发创建更多非核心线程(如果允许的话)。此时,可能需要适当增大corePoolSize
,以应对突发任务,减少任务在队列中的等待时间。但如果设置过大,在任务低谷期会造成资源浪费。 - 硬件资源考虑:根据服务器的CPU、内存等硬件资源来调整
corePoolSize
。如果服务器CPU核心数较多,可以适当增大corePoolSize
,充分利用CPU资源;若内存有限,过大的corePoolSize
可能导致内存不足问题,需要适当减小该值。