202108100745 - 线程池各个参数

** 参数名 ** ** 含义 **
corePoolSize 核心线程数,常驻线程数量
maxPoolSize 最大线程数
keepAliveTime+时间单位 空闲线程的存活时间
ThreadFactory 线程工厂、用来创建新线程
workQueue 用于存放任务的队列
Handler 处理被拒绝的任务

    1. 当核心线程池未满时,即时核心线程空闲,也会创建新的核心线程

corePoolSize 与 maximumPoolSize

通过上面的流程图,我们了解了 corePoolSize 和 maximumPoolSize 的具体含义,corePoolSize 指的是核心线程数,线程池初始化时线程数默认为 0,当有新的任务提交后,会创建新线程执行任务,如果不做特殊设置,此后线程数通常不会再小于 corePoolSize ,因为它们是核心线程,即便未来可能没有可执行的任务也不会被销毁。随着任务量的增加,在任务队列满了之后,线程池会进一步创建新线程,最多可以达到 maximumPoolSize 来应对任务多的场景,如果未来线程有空闲,大于 corePoolSize 的线程会被合理回收。所以正常情况下,线程池中的线程数量会处在 corePoolSize 与 maximumPoolSize 的闭区间内。

线程池的几个特点。

  • 线程池希望保持较少的线程数,并且只有在负载变得很大时才增加线程。
  • 线程池只有在任务队列填满时才创建多于 corePoolSize 的线程,如果使用的是无界队列(例如 LinkedBlockingQueue),那么由于队列不会满,所以线程数不会超过 corePoolSize。
  • 通过设置 corePoolSize 和 maximumPoolSize 为相同的值,就可以创建固定大小的线程池。
  • 通过设置 maximumPoolSize 为很高的值,例如 Integer.MAX_VALUE,就可以允许线程池创建任意多的线程。

keepAliveTime+时间单位

是一个可伸缩的过程,比较灵活,我们也可以用 setKeepAliveTime 方法动态改变 keepAliveTime 的参数值

ThreadFactory

第四个参数是 ThreadFactory,ThreadFactory 实际上是一个线程工厂,它的作用是生产线程以便执行任务。我们可以选择使用默认的线程工厂,创建的线程都会在同一个线程组,并拥有一样的优先级,且都不是守护线程,我们也可以选择自己定制线程工厂,以方便给线程自定义命名,不同的线程池内的线程通常会根据具体业务来定制不同的线程名。

workQueue

阻塞队列

public interface BlockingQueue<E> extends Queue<E>

Handler

任务拒绝策略

posted @ 2025-03-19 22:32  钱塘江畔  阅读(35)  评论(0)    收藏  举报