一.线程池的拒绝策略在什么时候启用
线程池:
//参数最多的构造方法
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler);
参数解释:
1 corePoolSize:线程池核心大小
2 maximumPoolSize:最大线程池大小
3 keepAliveTime和unit合在一起用于指定线程池中空闲线程的最大存活时间。
4 workQueue:工作队列
5 threaaadFactory: 用于创建工作者线程的线程工厂
6 handler: 线程池饱和时,封装被拒绝任务的处理策略。
抽象方法:abstract void rejectedExecution(Runnable r,ThreadPoolExecutor executor);
r代表被拒绝的任务,executor代表拒绝任务r的线程池实例。
我们来了解一下线程池执行任务的基本过程:
1.每过来一个任务,就启动一个核心线程,去执行任务
2.如果核心线程都用完了,再过来任务,存入阻塞队列
3.如果阻塞队列也存满了,再过来任务,可以再启动线程,直到达到最大线程数量
4.如果达到了最大线程数量,再过来任务,启动拒绝策略。
由此可知,任务数量达到了最大线程池数量,并且再过来任务时会启动拒绝策略。
二.拒绝策略的操作说明