是否存在ScheduledThreadPoolExecutor完全停止工作的情况?

时间:2015-02-14 16:17:03

标签: java multithreading

我们正在运行一个使用ScheduledThreadPoolExecutor管理某些工作的Java服务器应用程序。对于不同类型的工作,有多个实例在运行,但每个实例仅使用一个线程。这并不重要,为什么这样做真的没有办法解决它。我们在生产服务器上注意到的是,其中一个实例在某个时刻完全无声地停止工作。重新启动服务器再次将其恢复,但问题仍未解决。

我知道如果任务在某个时刻抛出异常,使用scheduleAtFixedRate将停止,但这不是这里的情况。我们有一个简单地停止执行的循环任务,以及使用schedule()方法但仍然没有执行的新任务。我认为它正在使用的线程已经死亡并且没有重新开始。

我的问题是,在任何情况下都可能发生这种情况吗?有什么我应该注意的吗?

1 个答案:

答案 0 :(得分:0)

看起来最简单的解释就是答案:所有线程都挂起。

在我的情况下,原因似乎是永远不会超时的HTTP请求。这可能发生在某些情况下,我还没有找到解决问题的好方法。我认为最好的选择是对计划任务本身实施超时,以确保我们避免任何问题。