我有一台服务器使用在服务器启动时创建的执行服务:
simpleExecutorService = Executors.newFixedThreadPool(nThreads, new MyThreadFactory(threadFactoryName));
然后我使用执行程序服务实例来执行某些任务。但过了一会儿(30分钟左右),我明白了:
java.util.concurrent.RejectedExecutionException
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)
我已经阅读here,当执行程序关闭时会发生这种情况。我从来没有把它关闭,所以怎么会发生这种情况呢?有关如何调试此类问题的任何想法吗?
答案 0 :(得分:2)
从您链接到的相同页面:
方法execute(java.lang.Runnable)中提交的新任务将是 当Executor关闭时,也被拒绝了 Executor对最大线程和工作队列使用有限边界 容量,并且已经饱和。
那么也许工作队列已满并且线程数最大化了?
你对它的最新情况有什么了解吗?通过JMX?附加探查者?调试日志?什么?