ThreadPoolExecutor是JDK并发包提供的一个线程池服务,基于ThreadPoolExecutor可以很容易将一个Runnable接口的任务放入线程池中。
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:核心线程数,会一直存活,即使没有任务,线程池会维护线程的最少数量。
maximumPoolSize:线程份维护线程的最大数量。
keepAliveTime:线程池维护线程所允许的空闲时间,当线程空闲时间达到keepAliveTime,该线程会退出,直到线程数量等于corePoolSize。如果allowCoreThreadTimeout设置为true,则所有线程均会退出直到线程数量为0.
unit:线程池维护线程所允许空闲时间的单位
workQueue:线程份所使用的缓冲队列
handler:线程池中的数量大于maximuPoolSize,对拒绝任务的处理策略。
(1)调用ThreadPoolExecutor的execute提交线程,首先检查CorePool,如果CorePool内的线程小于CorePoolSize,新创建线程执行任务。
(2)如果当前CorePool内的线程大于等于CorePoolSize,那么将线程加入到BlockingQueue。
(3)如果不能加入BlockingQueue,在小于MaxPoolSize的情况下创建线程执行任务。
(4)如果线程数据大于等于MaxPoolSize,那么执行拒绝策略。
最后欢迎大家访问我的个人网站:1024s