我正在使用ScheduledExecutorService
來運行預定線程。
我實施了ServletContextListener.contextDestroyed
並且調用了ScheduledExecutorService.shutdownNow
和awaitTermination
。Tomcat 7和ScheduledExecutorService.shutdown
下面是一個例子:
重度::
@Override public void contextDestroyed(ServletContextEvent servletcontextevent) { pool.shutdownNow(); // Disable new tasks from being submitted try { // Wait a while for existing tasks to terminate if (!pool.awaitTermination(50, TimeUnit.SECONDS)) { pool.shutdownNow(); // Cancel currently executing tasks System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { // (Re-)Cancel if current thread also interrupted pool.shutdownNow(); // Preserve interrupt status Thread.currentThread().interrupt(); } }
儘管如此,我從Tomcat 7得到以下錯誤Web應用[/ servlet的]似乎已經開始了 線程名稱爲[Timer-0]但無法停止它。這很可能是 創建內存泄漏。
該日誌可以忽略嗎?或者我做錯了什麼?
感謝
我的意思是,我的想法是:你的清理責任在哪裏停止?還有什麼可以做的呢?用消防水帶打開箱子? 非常認真,我的意思是說,它看起來像你正在做的一切你能做的......我會忽略這個錯誤。 – ControlAltDel 2012-03-29 17:51:41
你可以參考我以前的文章:) http://stackoverflow.com/questions/9926356/scheduledexecutorservice-when-shutdown-should-be-invoked – lili 2012-03-30 13:07:20