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