如果队列是无界的,它会调用 RejectedExecutionHandler 吗?
从文档中:
当 Executor 关闭时,以及 Executor 对最大线程和工作队列容量都使用有限的界限并且饱和时,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。
如果队列是无界的,它会调用 RejectedExecutionHandler 吗?
从文档中:
当 Executor 关闭时,以及 Executor 对最大线程和工作队列容量都使用有限的界限并且饱和时,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。
您发布的文档链接说明了一切。如果您指定有限边界或队列已关闭,RejectedExecutionHandler
则调用 。如果队列是无界的(并且我假设没有关闭),那么它将永远不会调用RejectedExecutionHandler
.
如果有任何问题,您可以设置一个只回调队列的处理程序。我使用类似的东西:
// set a handler that just calls back to the queue which will block the submitter
threadPool.setRejectedExecutionHandler(new RejectedExecutionHandler() {
public void rejectedExecution(Runnable runnable, ThreadPoolExecutor executor) {
// this will block if the queue is full
executor.getQueue().put(runnable);
}
});