首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >监视线程状态

监视线程状态
EN

Stack Overflow用户
提问于 2015-06-03 14:46:13
回答 4查看 1.3K关注 0票数 1

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

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

  • 我只是为了什么而努力吗?我的意思是,如果我理想地尝试-捕捉所有可能出错的代码,线程会不会没有任何明显的理由背叛我?
  • 做我说过的事的最佳做法是什么?定期使用另一个线程和一个ScheduledExecutor检查线程的运行状况?实现某种可观察的观察者模式?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-03 15:06:39

您可以创建ExecutorService,它通过Executors.newSingleThreadExecutor()侦听事件。在这种情况下,您不需要查看线程,如果线程是健康的,ExecutorService会处理这个问题。SingleThreadExecutor只负责一次运行一个任务(可运行或可调用)。

票数 1
EN

Stack Overflow用户

发布于 2015-06-03 16:56:06

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

票数 1
EN

Stack Overflow用户

发布于 2015-06-03 17:38:25

线程不应该停止工作,如果它停止工作,.

好的,所以写下来,这样它就不会停止工作。

代码语言:javascript
复制
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();
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30623435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档