2017-02-21 2 views
3

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?

Antwort

4

Es ist im Allgemeinen eine gute Übung, den Thread-Pool elegant zu schließen. Es kann länger dauern, Ihre Tomcat-Instanz herunterzufahren (im Fall von nicht abgeschlossenen Jobs), aber die Belohnung ist eine besser verwaltete und sichere Anwendung, die Sie vor zukünftigen Problemen bei nicht abgeschlossenen Jobs bewahren könnte.

Da Sie bereits den Frühling verwenden, möchten Sie vielleicht einen verwalteten Spring Thread Pool mit der ThreadPoolTaskExecutor betrachten.

+1

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

+0

Das ist eine echte Herausforderung! Ich wünsche das Beste! – gkatzioura

Verwandte Themen