我有一个运行JVM的Web服务器应用程序,我在其中管理类加载器。 我的应用程序有一个带循环时间任务的单例。在重新部署期间,我清除对Class的所有引用。 我看起来像带有timerTask的单身人士并没有死。 我添加了一个带print的finalize方法。 finalize方法永远不会调用。 任何解决方案?
答案 0 :(得分:4)
看看Servlet lifecycle。您的servlet可以实现destroy()
,这将在卸载时被调用。用它来关闭计时器等。
请注意,您永远不会依赖finalize()
被调用。
答案 1 :(得分:0)
使用Spring和Quartz,这些事情要容易得多。在Spring中,您可以将bean定义为singleton(与单例设计模式不完全相同,但它将满足您的需求)。此外,Quartz比TimerTask更强大/灵活/易于使用。
Spring将为您解决重新部署问题。你只需要定义一个destroy方法。