为什么Executors.newCachedThreadPool在提交期间抛出java.util.concurrent.RejectedExecutionException

时间:2009-10-05 12:13:44

标签: java concurrency

在此测试场景中提交的任务(线程)数量也不多。

2 个答案:

答案 0 :(得分:30)

您需要提供有关如何在池中实例化和调用submit的代码示例(IP应该不是问题,因为我们不需要您{{1}的内部细节类或类似的东西)。

根据您提供的信息,您几乎肯定会在向其提交可调用对象之前关闭执行程序服务。检查您是否拨打了Callableshutdown,如果是,请确保您在此之后不再添加任务。

除此之外,您可能希望注册自己的shutdownNow实现以帮助调试;只要执行程序无法接受任务,就会调用它的rejectedExecution消息,因此你可以在那里放置一些基本的状态检查逻辑来帮助你找到原因。

答案 1 :(得分:25)

我没有看到调用Executors.newCachedThreadPool()方法的RejectedExecutionException方法的任何地方。只有三种情况似乎在Java 6中抛出:

  • execute()上调用ThreadPoolExecutor并且已达到最大池大小时。
  • 在与execute()同时在ThreadPoolExecutor上致电shutdownNow时,shutdownNow电话基本上失败了。
  • 在执行程序关闭后尝试在ScheduledThreadPoolExecutor中安排执行runnable时。