1

如果队列是无界的,它会调用 RejectedExecutionHandler 吗?

从文档中:

当 Executor 关闭时,以及 Executor 对最大线程和工作队列容量都使用有限的界限并且饱和时,在方法 execute(java.lang.Runnable) 中提交的新任务将被拒绝。

4

1 回答 1

4

您发布的文档链接说明了一切。如果您指定有限边界或队列已关闭,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);
   }
});
于 2013-06-19T20:13:41.153 回答