4

我有一个使用在服务器启动时创建的执行服务的服务器:

simpleExecutorService = Executors.newFixedThreadPool(nThreads, new MyThreadFactory(threadFactoryName));

然后我使用执行器服务实例来执行一些任务。但过了一会儿(30分钟左右)我得到了这个:

java.util.concurrent.RejectedExecutionException
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)

我在这里读到,当执行程序关闭时,可能会发生这种情况。我从来没有关闭它,所以这怎么会发生?关于如何调试此类问题的任何想法?

4

1 回答 1

2

从您链接到的同一页面:

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

那么也许工作队列已满并且线程数已满?

你对它在做什么有任何了解吗?通过 JMX?附加分析器?调试日志?任何事物?

于 2013-01-09T17:38:26.237 回答