在我的 web 应用程序中,我有 3 个线程,其中 tomcat 无法在重新加载时停止其中的 2 个。
严重:Web 应用程序 [/myapp] 似乎已经启动了一个名为 [Thread-8] 的线程,但未能停止它。这很可能造成内存泄漏。2013 年 5 月 8 日上午 11:22:40 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
这会导致每次重新加载时 CPU 使用率都会上升。
这是tomcat无法停止的线程之一:
在我的 ServletContextListener 中实现的一些代码:
public void contextInitialized(ServletContextEvent event)
{
    final UpdaterThread updaterThread = new UpdaterThread();
    updaterThread.start();
    event.getServletContext().setAttribute("updaterthread", updaterThread);
}
public void contextDestroyed(ServletContextEvent event)
{
    UpdaterThread updaterThread = (UpdaterThread) event.getServletContext().getAttribute("updaterthread");
    if (updaterThread != null)
    {
        updaterThread.stopUpdater();
        updaterThread.interrupt();
        updaterThread = null;
    }
}
以及 UpdaterThread 的重要部分:
public class UpdaterThread extends Thread implements Runnable
{
    private boolean alive = true;
    @Override
    public void run()
    {
        while(true)
        {
            try
            {
                while (alive)
                {
                    doUpdate();
                    sleep(60*1000);
                }
            }
            catch (InterruptedException ie) {}
            catch (Exception e) {}
        }
    }
    public void stopUpdater()
    {
        alive = false;
    }
}
有谁知道为什么这个线程不会停止?有没有更好的方法来实现一个线程在特定时间做一些工作?