2017-04-01 3 views
2

Die Klasse javax.enterprise.concurrent.ManagedExecutorService verwaltet Threads in Enterprise Java Bean. As threads in EJBs should not be started in the classical Java SE way, I use the ManagedExecutorService to handle threads.So begrenzen Sie die Anzahl der Threads, die von ManagedExecutorService ausgeführt werden

„obligatorische Warnung: Erstellen Sie Ihre eigenen Threads in einem Java EE Applikationsserver (auch Tomcat) werden abgeraten, da es ein enormes Leistungsproblem sein kann, und in den meisten Fällen Container-Funktionalität, wie JNDI zu verhindern, von der Arbeit. Die neuen Threads werden nicht wissen, zu welcher Anwendung sie gehören, der Thread-Context-Klassenlader wird nicht gesetzt und viele andere versteckte Probleme. "

In Java SE können Sie die maximale Anzahl von Threads definieren, wie im folgenden Code gezeigt.

java.util.concurrent.Executors.newFixedThreadPool(numberOfThreadsInThePool); 

Wissen Sie, wie Sie die Anzahl der Threads begrenzen können, die vom ManagedExecutorService ausgeführt werden?

Antwort

0

Wenn Sie einen EE-Container verwenden, sollten Sie Probleme mit der Anzahl der Threads durch Konfiguration des Containers beheben. Informationen zu Glassfish finden Sie in der Oracle-Dokumentation zur Thread-Pool-Verwaltung und Leistungsoptimierung.

0

Die maximale Größe des Thread-Pools kann festgelegt werden, wenn der ManagedExcutor Service im Glassfish Application Server erstellt wird. Gemäß dem Artikel https://blogs.oracle.com/arungupta/entry/create_managedexecutorservice_managedscheduledexecutorservice_managedthreadfactory_contextservice hat der Befehl asadmin von glassfish einen Parameter "maximumpoolsize", der die maximale Anzahl von Threads definiert, die von ManagedExcututorService verwendet werden.

asadmin create-managed-executor-service concurrent/myExecutor --maximumpoolsize=20 
Verwandte Themen