【发布时间】:2020-01-24 02:36:52
【问题描述】:
我有一个长时间运行的线程来执行管理任务。鉴于系统不会立即受到影响,因此很难检测到线程的故障。我想确保这个线程永远不会消失。我的理解是只要代码捕捉到所有东西(Throwable),它就永远不会死。下面是示例代码:
while (true) {
try {
// house keeping logic
} catch (Throwable t) {
// do not do anything
}
}
我的理解正确吗?有没有更好的方法来托管长时间运行的后台任务?我知道 ScheduledExecutorService 可以定期安排任务,但是如果任务需要继续检查某些资源,那么将所有内容放在一个 while 循环中可能会更有效。
【问题讨论】:
-
在少数情况下线程会与整个JVM一起死掉(例如
OutOfMemoryError);不存在不朽的过程。这取决于资源,但将所有内容放在while循环中几乎肯定不是最有效的方式。 -
这个线程运行在什么样的应用程序中?
标签: java multithreading exception