当前位置: 首页 > 面试题库 >

TimerTask停止在Tomcat Servlet中运行的原因可能是什么?

从烈
2023-03-14
问题内容

我怀疑异常可能会使TimerTask停止运行,在这种情况下,我很可能需要第二个timetask来监视第一个仍在运行?

更新资料

感谢您的回答。我继承了此代码,因此有点无知…

我刚刚看到,如果我在工作中抛出未捕获的异常,TimerThread将永远停止运行。

的运行方法TimerThread表明,如果引发异常,则计划的线程将永远不会再次运行。

public void run() {
    try {
        mainLoop();
    } finally {
        // Someone killed this Thread, behave as if Timer cancelled
        synchronized(queue) {
            newTasksMayBeScheduled = false;
            queue.clear();  // Eliminate obsolete references
        }
    }
}

stacktrace的结尾将是:

at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

因此,临时解决方案是抓住一切…长期解决方案是,随着BalusC的提出,转向更好的调度。


问题答案:

当抛出未捕获的异常时,TimerTasks会死(无论它是否在tomcat中运行都无关)。解决此问题的最简单方法是在run方法中捕获RuntimeException,如果需要,请登录并继续。

还建议也捕获Throwables并在重新抛出之前对其进行记录,以便可以在日志中看到stacktrace,如下所示:

    try{
        doRun();
    }catch (RuntimeException e){
        logger.error("Uncaught Runtime Exception",e);
        return; // Keep working
    }catch (Throwable e){
        logger.error("Unrecoverable error",e);
        throw e;
    }


 类似资料:
  • 问题内容: 我正在尝试制作一个简单的计时器,该计时器在指定的秒数后发出提示音。我设法使其正常工作,但是TimerTask在蜂鸣声后继续运行。现在我停止执行吗?这是我的代码: 问题答案: 您需要通过调用以下方法来取消计时器 这将取消任务,因此可以执行以下操作:

  • 我们正在经历小GC暂停时间的增加。应用程序是一个用Java编写的服务器,每秒执行500个事务。在CMS收集之后,暂停时间会减少,但在运行数小时之后,暂停时间又会增加。我用vmstat检查了交换用法,没有任何交换输入/输出。 JVM参数:

  • 在运行时导致错误的servlet中的代码。 JSONArray parent=new JSONArray();

  • 问题内容: 我在雄猫服务器(+ liferay)上收到此异常 我的课是这样的: 我在行上收到此异常, 当队列已满但大小为2 ^ 31时,可能会发生此错误,并且我确定没有那么多命令在等待。 一开始一切都稳定,但在我重新部署战争后,一切开始发生。此类不是战争的一部分,而是放在tomcat / lib中的jar中。 您是否知道为什么会发生这种情况以及如何解决? 问题答案: 从ThreadPoolExec

  • 当然在文件结束或输入错误发生时返回,但这是否意味着没有更多的数据可用? 使用

  • 问题内容: 我遇到了运行时警告 由我的这一行代码生成: 两个和是numpy的阵列 该警告可能是什么原因? 问题答案: 这很可能是由于所涉及的输入中的某处而发生的。它的一个示例如下所示- 对于所有涉及的比较,它将输出。让我们确认一下以进行比较。这是一个示例- 请注意输出中的第三列,该列与包含第三元素的比较相对应,并得出所有值。