使用计时器任务重新部署单例

时间:2009-07-15 13:50:41

标签: java singleton

我有一个运行JVM的Web服务器应用程序,我在其中管理类加载器。 我的应用程序有一个带循环时间任务的单例。在重新部署期间,我清除对Class的所有引用。 我看起来像带有timerTask的单身人士并没有死。 我添加了一个带print的finalize方法。 finalize方法永远不会调用。 任何解决方案?

2 个答案:

答案 0 :(得分:4)

看看Servlet lifecycle。您的servlet可以实现destroy(),这将在卸载时被调用。用它来关闭计时器等。

请注意,您永远不会依赖finalize()被调用。

答案 1 :(得分:0)

使用Spring和Quartz,这些事情要容易得多。在Spring中,您可以将bean定义为singleton(与单例设计模式不完全相同,但它将满足您的需求)。此外,Quartz比TimerTask更强大/灵活/易于使用。

Spring将为您解决重新部署问题。你只需要定义一个destroy方法。