首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java static TimerTask关闭

问Java static TimerTask关闭
EN

Stack Overflow用户
提问于 2012-04-27 09:44:04
回答 1查看 1.1K关注 0票数 0

我有一个静态的、周期性的java定时器/定时器任务,当应用程序关闭时,我想关闭它。我不希望应用程序挂起,因为一些线程仍在运行(就像eclipse中的调试模式一样,一些环境可能会杀死它)。我将其设置为静态的原因是我计划在包含类的所有实例中与Timer共享一些(非常简单,可能只是一个计数器)的内存,所以我觉得类的作用域是合适的。

我的问题是如何最好地关闭计时器?现在是使用finalize的合适时机吗?这个计时器看起来足够友好,让一个不确定的调用来finalize可能会起作用?可能需要进行某种类型的实例计数,以验证是否不再存在该类的任何实例?欢迎就如何管理静态计时器的关闭提出建议。

伪代码:

代码语言:javascript
复制
class foo {

private static Timer someTimer = null;

public foo() {
  if(someTimer == null) {
     someTimer = new Timer(new TimerTask(...));
  }

}

//how should I shut this thing down?
protected void finalize() throws Throwable {

}

//or is better to have shutdown() called explicitly?

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-27 09:56:31

这完全取决于你的应用程序实际做了什么,但通常会有某种类型的事件来通知应用程序正在关闭。例如,如果它是一个GUI应用程序,那么这可能是“用户单击了退出按钮”事件。或者它是一个基于servlet API的webapp,它将是一个由ServletContextListener触发的事件。

您应该为该事件添加一个侦听器,该侦听器调用foo对象上的某种shutdown方法。在这个shutdown方法中,foo应该负责清理它的资源,包括停止计时器。

作为最后的手段,您可能希望研究一下JVM shutdown hooks

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10343727

复制
相关文章

相似问题

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