我有一个静态的、周期性的、java Timer/TimerTask,我想在应用程序运行时关闭它。我不希望应用程序挂起,因为某些线程仍在运行(例如在 Eclipse 中调试模式下发生的情况,某些环境可能会杀死该东西)。我让它静态的原因是我计划在所有包含类的实例中使用 Timer 有一些(非常简单,可能只是一个计数器)共享内存,所以我觉得类范围是合适的。
我的问题是如何最好地关闭定时器?现在是使用 finalize 的合适时间吗?这个计时器似乎足够良性,以至于有一个不确定的调用来完成可能会起作用?可能需要做某种实例计数来验证那里不再有该类的任何实例?欢迎提出有关管理静态计时器关闭的方法的建议。
伪代码:
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?
}