Ich habe eine REST-Anwendung (Stack: Java8/Tomcat7/Spring4.2/Jersey2.15) und verwende in meinem REST-Endpunkt einen Thread-Pool (ThreadPoolExecutor).Muss ich mich um das Herunterfahren eines ThreadPoolExecutors kümmern?
private ThreadPoolExecutor threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
Der Endpunkt Klasse wird mit der Feder Annotation @Component konfiguriert (so ist es standardmäßig ein Singleton).
Im javadoc von ThreadPoolExecutor Ich las diesen:
Finalization A pool that is no longer referenced in a program AND has no remaining threads will be shutdown automatically. If you would like to ensure that unreferenced pools are reclaimed even if users forget to call shutdown(), then you must arrange that unused threads eventually die, by setting appropriate keep-alive times, using a lower bound of zero core threads and/or setting allowCoreThreadTimeOut(boolean).
Also, wenn ich threadPool.shutdown nicht nennen() der Pool abgeschaltet werden, wenn die Anwendung beendet (normalerweise in diesem Fall, wenn Der Tomcat wird heruntergefahren oder die Anwendung wird gestoppt.
Meine Frage ist: Muss ich mich um das Herunterfahren des Pools kümmern? Können Nebenwirkungen auftreten? (z. B. mem Lecks, lange Tomcat Shutdown-Zeit, ...) Oder ist es felsenfest?
Wie hätte ich gedacht, ich sollte das Herunterfahren für den threadPool hinzufügen. Der Spring ThreadPoolTaskExecutor ist eine Überlegung für zukünftige Refactorings dieser Legacy-App. ATM dort sind zu viele Stellen von threadPools, also möchte ich Änderungen in den kleinen Schritten tun. – Erik
Das ist eine echte Herausforderung! Ich wünsche das Beste! – gkatzioura