我怀疑异常可能会使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的阵列 该警告可能是什么原因? 问题答案: 这很可能是由于所涉及的输入中的某处而发生的。它的一个示例如下所示- 对于所有涉及的比较,它将输出。让我们确认一下以进行比较。这是一个示例- 请注意输出中的第三列,该列与包含第三元素的比较相对应,并得出所有值。