Używam ScheduledExecutorService
do uruchamiania zaplanowanych wątków.
Zaimplementowałem ServletContextListener.contextDestroyed
i wywołałem ScheduledExecutorService.shutdownNow
i awaitTermination
.Tomcat 7 i ScheduledExecutorService.shutdown
Oto przykład:
@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();
}
}
Wciąż otrzymuję następujący błąd z Tomcat 7:
ciężkie: Aplikacja internetowa [/ servlet] wydaje się rozpoczął wątek o nazwie [Timer-0], ale nie udało się go zatrzymać. Jest to bardzo prawdopodobne, aby utworzyć wyciek pamięci.
Czy ten dziennik można zignorować? Czy robię coś nie tak?
Dzięki
Mam na myśli moją myśl: gdzie kończą się twoje obowiązki dotyczące sprzątania? Co jeszcze można tutaj zrobić? Hit box z wężem pożarniczym? Mówiąc poważnie, chcę powiedzieć, że wygląda na to, że robisz wszystko, co możesz zrobić ... Zignorowałbym ten błąd. – ControlAltDel
Możesz polecić mój poprzedni post :) http://stackoverflow.com/questions/9926356/scheduledexecutorservice-when-shutdown-should-be-invoked – lili