我在使用ThreadPoolExecutor时遇到了问题。它可以正常工作数小时,但有时候(随机时间,可能是2分钟或3小时后)会停止执行提交的任务,程序会卡住。
此时队列已满,所有核心线程都在运行。
我不知道这个问题从何而来,尤其是有时候所有核心线程一直在工作,却可以正常运行3小时。
如果有人能给我建议,我将非常感激。
此时队列已满,所有核心线程都在运行。
我不知道这个问题从何而来,尤其是有时候所有核心线程一直在工作,却可以正常运行3小时。
如果有人能给我建议,我将非常感激。
如果您使用较旧版本的Java虚拟机(JVM),可能与http://bugs.sun.com/view_bug.do?bug_id=6822370有关。这个问题在6u18中已得到解决。请参见http://www.oracle.com/technetwork/java/javase/6u18-142093.html。
我曾经遇到过一个类似的问题,那是一个进行I/O操作下载网页的代码。有时候,在几分钟或几个小时之后,某个线程会因为某些I/O操作而挂起并停止工作。
如果您也遇到了这种情况,可以设置一个超时时间。
在调试器中运行您的代码,当应用程序停止时,查看您的线程执行的最后一组方法。
ScheduledThreadPoolExecutor
,经过几个小时的使用,原因不明。在线程转储中没有异常;池中的所有线程都处于空闲状态。队列中有很多已经过时的ScheduledFutureTask
。 - Jesse Glick