我的 ThreadPoolExecutor 有问题。它可以正常工作几个小时,但有时(在随机时间,有时在 2 分钟或 3 小时后)它会停止执行提交的任务并且程序挂起。
队列已满,此时所有核心线程都处于活动状态。
我根本不知道这是从哪里来的。特别是因为它有时会工作 3 个小时,而所有核心线程一直在工作。
如果有人对我有建议,我会很高兴。
我的 ThreadPoolExecutor 有问题。它可以正常工作几个小时,但有时(在随机时间,有时在 2 分钟或 3 小时后)它会停止执行提交的任务并且程序挂起。
队列已满,此时所有核心线程都处于活动状态。
我根本不知道这是从哪里来的。特别是因为它有时会工作 3 个小时,而所有核心线程一直在工作。
如果有人对我有建议,我会很高兴。
看一下堆栈转储。这将告诉您线程是否处于某种阻塞操作、等待从未发生、工作或真正死锁的条件。
I had a similar problem with a code that do I/O operations downloading web pages. At some point, sometimes, in minutes or hours, a thread hangs doing some I/O operation and stop to work.
If this is your case, set an abortion time.
Run your code in a debugger and when your application stop, see what were the last methods that your threads executed.
如果您使用的是旧版本的 JVM,它可能与http://bugs.sun.com/view_bug.do?bug_id=6822370有关。这已在 6u18 中修复。见http://www.oracle.com/technetwork/java/javase/6u18-142093.html
您可能在某处发生内存泄漏,并在几个小时后导致锁定