Ich verwende ScheduledExecutorService
, um geplante Threads auszuführen.
Ich habe ServletContextListener.contextDestroyed
implementiert und ScheduledExecutorService.shutdownNow
und awaitTermination
aufgerufen.Tomcat 7 und ScheduledExecutorService.shutdown
Hier ist ein Beispiel:
SCHWEREN: Die Web-Anwendung [/ Servlet] erscheint ein begonnen haben
@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(); } }
Aber ich bin von Tomcat 7 die folgende Störung zu erhalten Thread mit dem Namen [Timer-0], konnte jedoch nicht gestoppt werden. Dies ist sehr wahrscheinlich , um ein Speicherleck zu erstellen.
Kann dieses Protokoll ignoriert werden? Oder mache ich etwas falsch?
Dank
Ich meine, mein Gedanke ist: Wo hört Ihre Verantwortung für Aufräumarbeiten auf? Was kann hier noch getan werden? Hit the box mit einem Feuerwehrschlauch? In aller Ernsthaftigkeit, was ich damit sagen will, ist, dass es so aussieht, als würden Sie alles tun, was Sie tun können ... Ich würde diesen Fehler ignorieren. – ControlAltDel
Sie können meine vorherige Post beziehen :) http://stackoverflow.com/questions/9926356/scheduledexecutorservice-when-shutdown-should-be-invoiced – lili