ThreadPoolExecutor 是线程池的核心类,构造方法如下:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {
}

参数解释:

  • corePoolSize 核心线程数。
  • maximumPoolSize 最大线程数。线程数=核心线程数+非核心线程数。
  • keepAliveTime 非核心线程的保活时间,非核心线程空闲时间大于这个保活时间时会被回 收。如果调用了 allowCoreThreadTimeOut(true)设置允许核心线程超时回收,那么核心线 程超时达到保活时间,一样会被回收。
  • unit keepAliveTime 参数的时间单位。
  • workQueue 任务的队列,execute 方法提交的 Runnable 任务在执行之前会保存到这个队里 中。
  • threadFactory 创建线程的工厂,如果使用重载方法,默认为 Executors.defaultThreadFactory()。
  • handler 线程池处理不过来时的拒绝回调,所谓的处理不过来就是指队列已满并且达到了 最大线程数。这个参数如果使用重载方法,默认为 AbortPolicy,也就是直接抛出 RejectedExecutionException。

线程池任务提交流程:

!pragma useVerticalIf on
:提交任务;
if (达到核心线程数?) then (否)
    :创建工作线程\n(核心线程);
    detach
elseif (任务队列已满?) then (否)
    :放入任务队列;
    detach
elseif (达到最大线程数?) then (否)
    :创建工作线程\n(非核心线程);
    :超时则销毁线程;
    detach
else
    :拒绝策略;
endif