【发布时间】:2011-10-23 12:03:40
【问题描述】:
我的 ThreadPoolExecutor 有问题。它可以在几个小时内正常工作,但有时(随机时间,有时在 2 分钟或 3 小时后)它会停止执行提交的任务并且程序会挂起。
队列已满,此时所有核心线程都处于活动状态。
我根本不知道这是从哪里来的。特别是因为它有时会工作 3 个小时,而所有核心线程一直在工作。
如果有人对我有建议,我会很高兴。
【问题讨论】:
-
这是一个僵局。那么线程之间共享什么代码呢? redneck 调试:尝试在调试模式下运行您的应用程序并等待它锁定,连接调试器并挂起 jvm,然后您可以看到所有线程在哪一点。
-
如果您怀疑死锁,则转储所有线程的堆栈跟踪。在 Windows 上,这是通过按 Control-Break 来完成的。查看线程已同步的内容以及它们正在等待的内容。
-
发生在 7u45 我的一个客户身上,使用
ScheduledThreadPoolExecutor,经过几个小时的使用,原因不明。线程转储中没有任何异常;池中的所有线程都处于空闲状态。很多ScheduledFutureTasks 和times 过去都在排队。
标签: java concurrency threadpool executor