スケジュールされたスレッドを実行するのに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から次のエラーを取得しています:
SEVERE:Webアプリケーション[/サーブレット]は開始しているように見えます [Timer-0]という名前のスレッドで、スレッドを停止できませんでした。これはおそらくメモリリークを作成する です。
このログは無視できますか?または私は何か間違っている?
おかげ
私の考えは次のとおりです。クリーンアップの責任はどこで止まりますか?ここで何ができるのですか?消防ホースで箱を叩く? すべての深刻なことに、私が言いたいことは、あなたができることすべてについてやっているように見えるということです。私はそのエラーを無視したいと思います。 – ControlAltDel
あなたは私の以前の投稿を参照するかもしれません:) http://stackoverflow.com/questions/9926356/scheduledexecutorservice-when-shutdown-should-be-invoked – lili