Shared-ThreadPool für ForkJoinPool ab Java 8

Thomas Darimont

Erfahrenes Mitglied
Hallo,

will man den ForkJoinPool (FJP) unter Java 7 verwenden, so muss man diesem einen entsprechenden Thread-Pool zur Verfügung stellen.
Oftmals wird dazu ein einfach neuer ThreadPool erzeugt, welcher dann für den entsprechenden FJP verwendet wird.
Möchte man nun im System mehrere FJPs verwenden, so wird häufig für jeden FJP ein eigener Thread-Pool erzeugt.
Da sich diese FJPs trotz unterschiedlicher Thread-Pools jedoch natürlich die zugrunde-liegenden CPU-Ressourcen teilen, ist ein zentrales Balancing / Throttling
der verwendeten CPU Ressourcen nur noch bedingt möglich -> Der Parallelitätsgrad der einzelnen FJPs kann dann bei parallel ablaufenden FJP-Prozessen nicht mehr
so gut gesteuert werden.
Das ist auch ein Grund, weshalb ab Java 8 der ForkJoinPool über die statische Methode commonPool() einen, standardmäßigen JVM-weiten, Thread-Pool bereitstellt
welcher versucht ein bestimmtes Parallelitätsniveau zu halten. Darüber hinaus bietet dieser die Möglichkeit den Parallelitätsgrad von FJP Operationen innerhalb
einer JVM besser zu kontrollieren.

Zur Konfiguration des ForkJoinPools gibt es ein paar eigene System-Properties:
1) java.util.concurrent.ForkJoinPool.common.parallelism (int)
2) java.util.concurrent.ForkJoinPool.common.threadFactory (Class-Name als String)
3) java.util.concurrent.ForkJoinPool.common.exceptionHandler (Class-Name als String)

Siehe auch:
http://download.java.net/jdk8/docs/api/java/util/concurrent/ForkJoinPool.html -> commonPool

Gruß Tom
 
Zurück