Heim >Java >javaLernprogramm >Wie kann ich Thread-Pools für parallele Java 8-Streams anpassen?
Anpassen von Thread-Pools für Java 8 Parallel Streams
Java 8 führte parallele Streams ein und bietet effiziente Parallelität für datenintensive Vorgänge. Allerdings ist die Angabe benutzerdefinierter Thread-Pools für parallele Streams nach wie vor ein schwer fassbares Feature. Dieser Artikel befasst sich mit diesem Problem und stellt eine Problemumgehung mit ForkJoinPool vor.
Ein Hauptproblem bei Standard-Thread-Pools ist das Potenzial für Blockierungsverhalten. Eine langsam laufende Aufgabe in einem Stream kann die Ausführung in anderen parallelen Streams behindern. Dies ist insbesondere bei Multithread-Anwendungen problematisch, bei denen Isolation entscheidend ist.
Um diese Einschränkung zu überwinden, können Sie für jede Aufgabe einen eigenen ForkJoinPool erstellen. Beim Ausführen eines parallelen Streams als separate Aufgabe innerhalb dieses ForkJoinPools bleibt der Stream isoliert und verwendet den angegebenen Thread-Pool anstelle des Standard-Thread-Pools.
Beachten Sie den folgenden Codeausschnitt:
final int parallelism = 4; ForkJoinPool forkJoinPool = null; try { forkJoinPool = new ForkJoinPool(parallelism); final List<Integer> primes = forkJoinPool.submit(() -> IntStream.range(1, 1_000_000).parallel() .filter(PrimesPrint::isPrime) .boxed().collect(Collectors.toList()) ).get(); System.out.println(primes); } catch (InterruptedException | ExecutionException e) { throw new RuntimeException(e); } finally { if (forkJoinPool != null) { forkJoinPool.shutdown(); } }
Dieser Code erstellt einen neuen ForkJoinPool mit einer angegebenen Parallelität und führt darin einen parallelen Stream aus. Der parallele Stream arbeitet in seinem isolierten Pool und verhindert so mögliche Störungen durch andere Threads.
Dieser Ansatz bietet eine bessere Kontrolle über die Thread-Zuweisung, sodass Entwickler parallele Streams unterteilen und Ressourceneffizienz in Multithread-Anwendungen sicherstellen können.
Das obige ist der detaillierte Inhalt vonWie kann ich Thread-Pools für parallele Java 8-Streams anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!