Java ThreadPoolExecutor在一段时间后停止工作

3
我在使用ThreadPoolExecutor时遇到了问题。它可以正常工作数小时,但有时候(随机时间,可能是2分钟或3小时后)会停止执行提交的任务,程序会卡住。
此时队列已满,所有核心线程都在运行。
我不知道这个问题从何而来,尤其是有时候所有核心线程一直在工作,却可以正常运行3小时。
如果有人能给我建议,我将非常感激。

2
这是一个死锁。那么哪些代码在线程之间共享?红颈调试:尝试以调试模式运行您的应用程序并等待它锁定,连接调试器并暂停JVM,然后您可以看到所有线程的执行点。 - M Platvoet
如果你怀疑出现了死锁,那么就要转储所有线程的堆栈跟踪。在Windows上,可以通过按下Control-Break来完成此操作。查看线程已同步的内容以及它们正在等待的内容。 - Steve Kuo
在我的客户端中发生了这种情况,使用ScheduledThreadPoolExecutor,经过几个小时的使用,原因不明。在线程转储中没有异常;池中的所有线程都处于空闲状态。队列中有很多已经过时的ScheduledFutureTask - Jesse Glick
4个回答

1

看一下堆栈转储。这将告诉您线程是否处于某些阻塞操作中,等待永远不会发生的条件、工作或真正死锁。


0

0

我曾经遇到过一个类似的问题,那是一个进行I/O操作下载网页的代码。有时候,在几分钟或几个小时之后,某个线程会因为某些I/O操作而挂起并停止工作。

如果您也遇到了这种情况,可以设置一个超时时间。

在调试器中运行您的代码,当应用程序停止时,查看您的线程执行的最后一组方法。


0
你可能有一个内存泄漏的问题,这可能会导致几个小时后锁定。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接