监控线程状态

Monitor thread status

所以我在程序启动时启动了这个非常相关的线程。 当主线程做其他事情时,线程正在监听来自更大系统的事件。 线程永远不应停止工作,如果停止工作,则应重新创建并启动它。

我想我知道实现这一目标的多种方法,但我想知道您对某些事情的看法:

您可以通过 Executors.newSingleThreadExecutor() 创建监听事件的 ExecutorService。 在那种情况下,您不必查看线程是否健康,ExecutorService 会处理它。 SingleThreadExecutor 负责一次只有一个任务(Runnable 或 Callable)是 运行。

如果您正在检查使用正常 Java 提供的方法来正确查看线程状态,您应该不会有任何错误。如果抛出检查异常或线程由于某种奇怪的原因退出,try-finally 块应该足以启动一个新线程(同时确保它是非守护进程)。您可以使用带有周期性暂停的 while 循环,最好使用线程调度机制,例如 timed wait(...) 或 timed LockSupport#park(...)。您也可以休眠线程。

The thread should never stop working and if it does,...

好的,就这么写吧,让它永远不会停止工作。

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();
            }
        }
    }
}

这是一个有点毫无意义和徒劳的练习。应调试应用程序生命周期线程并使其不停止。您的应用程序的主线程在进程生命周期内持续存在,任何其他线程都应按照相同的标准进行设计、测试和调试。

如果停止的线程在崩溃时损坏了其他线程中的数据,会发生什么情况?如果您只是以某种方式重新启动它,数据损坏可能会使情况变得更糟。