面试题答案
一键面试corePoolSize
- 含义:线程池中核心线程数的大小。核心线程是线程池长期维持的线程数量,即使这些线程处于空闲状态,也不会被销毁(除非设置了
allowCoreThreadTimeOut
为true
)。 - 作用:当有新任务提交到线程池时,线程池会优先创建核心线程来执行任务,直到核心线程数达到
corePoolSize
。
maximumPoolSize
- 含义:线程池中允许的最大线程数。当核心线程都在忙碌且任务队列已满时,线程池会继续创建新线程,直到线程总数达到
maximumPoolSize
。 - 作用:它限制了线程池能够使用的最大资源,防止因线程过多导致系统资源耗尽。
keepAliveTime
- 含义:当线程池中的线程数量超过
corePoolSize
时,多余的空闲线程的存活时间。即这些空闲线程在多长时间内没有任务执行就会被销毁。 - 作用:通过设置合理的存活时间,可以在任务量减少时,自动回收多余的线程资源,避免资源浪费。
unit
- 含义:
keepAliveTime
参数的时间单位,如TimeUnit.SECONDS
(秒)、TimeUnit.MINUTES
(分钟)等。 - 作用:明确
keepAliveTime
的时间度量单位,方便进行时间设置。
workQueue
- 含义:用于保存等待执行的任务的阻塞队列。当核心线程都在执行任务时,新提交的任务会被放入这个队列中等待执行。
- 作用:缓冲任务,控制任务进入线程池执行的节奏,避免过多任务同时涌入线程池导致资源耗尽。常见的队列类型有
ArrayBlockingQueue
、LinkedBlockingQueue
、SynchronousQueue
等,不同的队列类型有不同的特性,会影响线程池的运行行为。
threadFactory
- 含义:用于创建新线程的工厂。它提供了一种统一的方式来创建线程,例如可以设置线程的名称、优先级、是否为守护线程等属性。
- 作用:方便对线程进行统一的配置和管理,使得创建的线程具有一致的属性和行为。
rejectedExecutionHandler
- 含义:当线程池和任务队列都已满,无法再接受新任务时,所采取的拒绝策略。
- 作用:定义了任务无法执行时的处理方式,常见的拒绝策略有
AbortPolicy
(抛出异常)、CallerRunsPolicy
(在调用者线程中执行任务)、DiscardPolicy
(直接丢弃任务)、DiscardOldestPolicy
(丢弃队列中最老的任务,然后尝试提交新任务) ,开发人员可以根据业务需求选择合适的策略。