线程池的七个参数通常指在使用ThreadPoolExecutor
创建线程池时设置的参数
-
corePoolSize
(核心线程数):线程池中始终保持运行的线程数量。线程池刚创建时,里面没有线程,当调用execute()
方法添加一个任务时,如果正在运行的线程数量小于corePoolSize
,则会马上创建新线程并运行该任务。 -
maximumPoolSize
(最大线程数):线程池允许创建的最大线程数量。当核心线程数已满,且工作队列已满,同时线程池还没达到最大线程数时,会创建一个新线程来处理任务。 -
keepAliveTime
(空闲线程存活时间):当可被回收的线程(如设置了allowCoreThreadTimeout=true
的核心线程或大于核心线程数的非核心线程)的空闲时间大于keepAliveTime
时,该线程会被回收。 -
unit(时间单位):用于指定
keepAliveTime
的时间单位,例如秒、分钟等。 -
workQueue
(工作队列):新任务被提交后,会先添加到工作队列中,任务调度时再从队列中取出任务。常见的工作队列有:
-
ArrayBlockingQueue
:数组结构的有界阻塞队列,遵循先进先出(FIFO)原则。 -
LinkedBlockingQueue
:链表结构的近似无界阻塞队列(最大容量为Integer.MAX_VALUE
)。 -
SynchronousQueue
:容量为 0 的同步队列,添加任务必须等待取出任务。 -
PriorityBlockingQueue
:无界的优先阻塞队列,可通过指定比较器实现元素的优先级排序。 -
DelayQueue
:无界的延时队列,元素具有过期时间,只有过期的元素才能被取出。
-
-
threadFactory
(线程工厂):用于创建新线程,可以设定线程的名称、是否为守护线程等属性。 -
handler
(拒绝策略):当线程池线程数已满,且工作队列达到限制,新提交的任务需要使用拒绝策略进行处理。新提交的任务需要使用拒绝策略进行处理。