所以我有一个非常相关的线程,我在程序启动时启动。 线程正在侦听来自更大系统的事件,因为主线程执行其他操作。 线程应该永远不会停止工作,如果确实如此,它应该重新创建并启动。
我想我知道有多种方法可以做到这一点,但我想知道你对某些事情的看法:
答案 0 :(得分:1)
您可以创建通过Executors.newSingleThreadExecutor()
收听事件的ExecutorService。
在这种情况下,如果线程健康,则不必查看该线程,ExecutorService负责处理。 SingleThreadExecutor负责一次只运行一个Task(Runnable或Callable)。
答案 1 :(得分:1)
如果使用普通的Java提供的方法检查正确查看线程状态,则不应该有任何错误。如果抛出一个已检查的异常或由于一些奇怪的原因而退出该线程,则try-finally块应该足以启动一个新线程(同时确保它是非守护进程)。您可以使用带有周期性暂停的while循环,最好使用线程调度机制,例如定时wait(...)
或定时LockSupport#park(...)
。你也可以睡觉线程。
答案 2 :(得分:1)
线程永远不会停止工作,如果确实如此,......
好的,所以写下来以便它永远不会停止工作。
public void run() {
while (true) {
try {
Message message = receiveNextMessage();
handleMessage(message);
} catch (Exception ex) {
LOGGER.error(ex);
if (somethingTrulyHorribleHasHappened(ex)) {
Runtime.getRuntime().exit(1);
} else {
maybeResetSomethingThatNeedsToBeReset();
}
}
}
}
答案 3 :(得分:1)
这是一种毫无意义和徒劳的做法。应该调试应用程序生命周期线程并使其不停止。您的应用程序的主线程将持续处理生命周期,并且任何其他线程都应按照相同的标准进行设计,测试和调试。
如果停止的线程在崩溃时在其他线程中损坏了数据,会发生什么?如果你只是以某种方式重新启动它,数据损坏可能会使情况变得更糟。