Threadverwaltung und Spring Framework
Verwenden Sie die Informationen in den folgenden Abschnitten, um potenzielle Probleme mit nicht verwalteten Threads zu vermeiden.
Nicht verwaltete Threads
- Der Anwendungsserver erkennt keine nicht verwalteten Threads.
- Nicht verwaltete Threads haben keinen Zugriff auf Java™ EE-Kontextinformationen.
- Nicht verwaltete Threads können Ressourcen verwenden, ohne vom Anwendungsserver überwacht zu werden.
- Nicht verwaltete Threads können sich nachteilig auf Anwendungsserverfunktionen auswirken, z. B. bei normaler Beendigung oder beim Wiederherstellen von Ressourcen nach einem Fehler.
- Der Administrator kann weder Anzahl nicht verwalteter Threads noch ihre Ressourcennutzung steuern.
- registerShutdownHook
Vermeiden Sie, die Spring-Framework-Klasse "AbstractApplicationContext" und ihre Methoden zu verwenden. Diese Klassen enthalten die allgemein zugängliche Methode "registerShutdownHook", die einen Thread erstellt und ihn bei der Java Virtual Machine (JVM) registriert, um ihn zum Schließen des Anwendungskontexts auszuführen. Alternativ kann eine Anwendung die Lebenszyklushinweise verwenden, die sie vom Anwendungs-Server-Container empfängt, um die Methode "close" explizit im Anwendungskontext aufzurufen.
- WeakReferenceMonitor
Spring Framework stellt vordefinierte Klassen für eine vereinfachte Entwicklung von EJB-Komponenten bereit. Diese vordefinierten Klassen erzeugen jedoch einen nicht verwalteten Thread, den das Objekt "WeakReferenceMonitor" für die Bereinigung verwendet.
Thread-Pooling
WebSphere Application Server unterstützt die Verwendung der Spring-Klasse "Framework WorkManagerTaskExecutor" für die asynchrone Ausführung von Arbeiten.
Die Klasse "WorkManagerTaskExecutor" verwendet Thread-Pools, die vom Anwendungsserver verwaltet werden, und delegiert die Arbeit an eine konfigurierte WorkManager-Instanz. Informationen zum Konfigurieren eines Arbeitsmanagers (Work Manager) finden Sie in den zugehörigen Artikeln.
Verwenden Sie keine anderen TaskExecutor-Klassen, die mit Spring Framework bereitgestellt werden, weil diese nicht verwaltete Threads starten könnten.
<bean id="myTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
</bean>
Zeitplanung
Sie können das CommonJ-WorkManager-Paket für Zeitplanung in Spring Framework verwenden, um mit Threads zu arbeiten, die vom Anwendungsserver verwaltet werden. Vermeiden Sie die Verwendung anderer Pakete, wie z. B. die Verwendung des Quartz-Schedulers oder des Timer-Pakets in Java SE Development Kit (JDK), weil diese nicht verwaltete Threads starten könnten.