线程池核心参数

corePoolSize

表示线程池中维护的核心线程数。核心线程是一直存在的线程,当线程池中的任务数量超过核心线程数时,任务会被加入任务队列中,等待核心线程来处理。

这里需要注意的是:在刚刚创建ThreadPoolExecutor的时候,线程并不会立即启动,而是要等到有任务提交时才会启动,除非调用了prestartCoreThread/prestartAllCoreThreads事先启动核心线程。再考虑到keepAliveTime和allowCoreThreadTimeOut超时参数的影响,所以没有任务需要执行的时候,线程池的大小不一定是corePoolSize。

当线程池中的任务数量不断增加,超过了核心线程数和任务队列的容量时,线程池就会创建新的线程来处理任务,直到达到 maximumPoolSize 的限制。如果线程池中的线程数量大于核心线程数,但小于最大线程数,当空闲线程的空闲时间超过了 keepAliveTime 参数设定的时间时,这些线程会被终止并从线程池中移除。

maximumPoolSize

表示线程池中最多能创建的线程数量。当线程池中的线程数达到这个数量后,线程池将不再创建新的线程。

WorkQueue

表示线程池中的任务队列。任务队列用于存放尚未被执行的任务,待核心线程空闲时会从任务队列中取出任务进行处理。

线程池的任务队列可以分为两种类型:

  • 有界队列。有界队列的大小是固定的,当队列已满时,新的任务将被拒绝。

  • 无界队列。无界队列的大小没有限制,可以存放任意数量的任务。

常见的任务队列类型有以下几种:

  1. ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。

  2. LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。

  3. SynchronousQueue:一个不存储元素的阻塞队列,每个插入操作必须等待一个相应的删除操作,否则插入操作将一直处于阻塞状态。

根据实际情况,选择不同的任务队列类型可以实现更高效的任务处理。如果任务数量较少,可以选择无界队列;如果任务数量较多,可以选择有界队列,避免内存溢出。同时,需要根据任务的特性和系统资源的限制来调整任务队列的大小和类型。


线程池核心参数
http://lanfunoe.site/2023/02/25/线程池核心参数/
作者
John Doe
发布于
2023年2月25日
许可协议