public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue
RejectedExecutionHandler handler)
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue
Executors.defaultThreadFactory(), handler);
}
解释其中参数意思:
corePoolSize核心线程数:指线程池中维护的最小线程数量,即使他们处于空闲,也一直存在池子里,除非超过了存储时间。
maximunPoolSize最大线程数:指线程池中的最大容量。
keepAliveTime空闲线程存活时间:指当线程数大于核心线程数时,空闲线程在等待新任务到达的最大时间,如果超过这个时间还没有任务请求,该空闲线程就会被销毁。
unit空闲线程存活时间的单位:是指空闲线程存活时间的单位。
workQueue线程工作队列:是指将新加入的线程存起来的一个数据结构。有以下几种常见结构:ArrayBlockingQueue FIFO有界阻塞队列、LinkedBlockingQueue FIFO无限队列、PriorityBlockingQueue VIP、SynchronousQueue不缓存任务的阻塞队列。
threadFactory线程工厂:用来创建线程的,一个任务对应着一个线程。
handler超出线程数和工作队列时候的任务请求处理策略:如果超过了线程池的容量,那如何处理多余的任务呢?有以下几种方法:
策略1:ThreadPoolExecutor.AbortPolicy(默认)拒绝执行
策略2:ThreadPoolExecutor.CallerRunsPolicy调用 execute 方法的线程本身运行任务
策略3:ThreadPoolExecutor.DiscardOldestPolicy执行程序未关闭,则删除工作队列头部的任务
策略4:ThreadPoolExecutor.DiscardPolicy无法执行的任务被简单地删除