Sto utilizzando ScheduledExecutorService
per eseguire i thread pianificati.
Ho implementato ServletContextListener.contextDestroyed
e invocato ScheduledExecutorService.shutdownNow
e awaitTermination
.Tomcat 7 e ScheduledExecutorService.shutdown
Ecco un esempio:
@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();
}
}
Eppure, sto ottenendo il seguente errore da Tomcat 7:
GRAVI: L'applicazione web [/ servlet] sembra aver iniziato una thread denominato [Timer-0] ma non è riuscito a fermarlo. È molto probabile che crei una perdita di memoria.
Questo log può essere ignorato? O sto facendo qualcosa di sbagliato?
Grazie
Voglio dire, il mio pensiero è: dove si fermano le responsabilità per la pulizia? Cos'altro si può fare qui? Colpire la scatola con una manichetta antincendio? In tutta serietà, quello che intendo dire è che sembra che tu stia facendo tutto quello che puoi fare ... Ignorerei quell'errore. – ControlAltDel
Puoi riferirti al mio post precedente :) http://stackoverflow.com/questions/9926356/scheduledexecutorservice-when-shutdown-should-be-invoked – lili