ThreadPoolExecutor四个构造方法最终都会调用下面的方法,所以只要理解了下面这个,其他同理:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler);
corePoolSize: 核心线程数量最大值。核心线程默认是不会被回收的。
-
maximumPoolSize: 线程池最大线程数量。最大线程数量=核心线程数量+非核心线程数量。
-
keepAliveTime: 非核心线程最大闲置时长,超过这个时间该非核心线程会被销毁。
-
unit: keepAliveTime的时间单位,支持微妙、毫秒、秒、分、时、天。
-
workQueue: 线程池待执行任务队列。
注意:新任务到来时,核心线程接任务,当核心线程被用完后,新的任务会被添加到待执行队列中,当待执行队列被沾满时,才会创建非核心线程接任务。
常用workQueue:
SynchronousQueue:不保留任务,直接提交给线程处理,如果所有线程都在忙&