Java ThreadPoolExecutor是否没有预定义的饱和策略?
我正在实践中阅读Java并发,对ThreadPoolExecutor的声明感到困惑,如下所示: 工作时,没有预定义的饱和策略使执行阻塞 队列已满 但是,作者也将Java ThreadPoolExecutor是否没有预定义的饱和策略?,java,threadpoolexecutor,Java,Threadpoolexecutor,我正在实践中阅读Java并发,对ThreadPoolExecutor的声明感到困惑,如下所示: 工作时,没有预定义的饱和策略使执行阻塞 队列已满 但是,作者也将中止作为默认策略 那么这里出了什么问题?如java文档中所述: 在以下情况下,在方法execute(Runnable)中提交的新任务将被拒绝: 执行器已关闭,并且在执行器使用 最大线程和工作队列容量的有限界限,和为 饱和。在任何一种情况下,execute方法都会调用 RejectedExecutionHandler.rejectedExe
中止
作为默认策略
那么这里出了什么问题?如java文档中所述: 在以下情况下,在方法execute(Runnable)中提交的新任务将被拒绝: 执行器已关闭,并且在执行器使用 最大线程和工作队列容量的有限界限,和为 饱和。在任何一种情况下,execute方法都会调用 RejectedExecutionHandler.rejectedExecution(可运行, 其RejectedExecutionHandler的ThreadPoolExecutor)方法 有4种不同的预定义处理程序:
/**
* The default rejected execution handler
*/
private static final RejectedExecutionHandler defaultHandler =
new AbortPolicy();
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
threadFactory, defaultHandler);
}
/**
*默认被拒绝的执行处理程序
*/
私有静态最终拒绝执行处理程序defaultHandler=
新的反堕胎政策();
公共线程池执行器(int corePoolSize,
int maximumPoolSize,
长时间,
时间单位,
阻塞队列(工作队列){
这(corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、,
Executors.defaultThreadFactory(),defaultHandler);
}
公共线程池执行器(int corePoolSize,
int maximumPoolSize,
长时间,
时间单位,
阻塞队列工作队列,
螺纹工厂(螺纹工厂){
这(corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、,
threadFactory,defaultHandler);
}
正如@Jiri tosek所说,所有这些默认行为都会阻止调用者。为了与问题中的引用相关,四个预定义策略都不会阻止调用者。