Benutzerdefinierter Thread-Pool für parallele Java 8-Streams
Der parallele Stream von Java 8 bietet eine praktische Möglichkeit, Vorgänge zu parallelisieren und die Leistung zu verbessern. In bestimmten Szenarien kann es jedoch wünschenswert sein, einen benutzerdefinierten Thread-Pool zu verwenden, um die Thread-Zuweisung zu steuern und verschiedene Aufgaben innerhalb einer Anwendung zu unterteilen.
Können parallele Streams einen benutzerdefinierten Thread-Pool verwenden?
Anfangs gab es keine explizite Möglichkeit, einen benutzerdefinierten Thread-Pool einem parallelen Stream zuzuweisen. Dies kann zu Herausforderungen führen, wenn es um Anwendungen mit mehreren Modulen geht und verhindert werden muss, dass langsame Aufgaben andere blockieren.
Der Fork-Join-Pool-Trick
Es gibt jedoch einen eine Problemumgehung mithilfe der Fork-Join-Pool-API. Durch die Übermittlung einer parallelen Aufgabe innerhalb eines separaten Fork-Join-Pools ist es möglich, sie vom gemeinsamen Pool zu isolieren, der von den Stream-Vorgängen verwendet wird. Hier ist ein Beispiel:
final int parallelism = 4; ForkJoinPool forkJoinPool = null; try { forkJoinPool = new ForkJoinPool(parallelism); final List<Integer> primes = forkJoinPool.submit(() -> { // Parallel task here, for example 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 dedizierten Fork-Join-Pool mit einer angegebenen Parallelität und übergibt ihm die parallele Aufgabenausführung. Dadurch können die angegebenen Aufgaben innerhalb ihres eigenen Thread-Pools ausgeführt werden, wodurch sie vom gemeinsamen Pool getrennt werden.
Fazit
Die Problemumgehung mithilfe eines Fork-Join-Pools bietet eine Möglichkeit um einen benutzerdefinierten Thread-Pool für parallele Streams in Java 8 zu verwenden. Er ermöglicht eine feinere Kontrolle über die Thread-Zuweisung und -Unterteilung und ermöglicht so die parallele Ausführung von Aufgaben ohne Modulübergreifend Blockierung.
Das obige ist der detaillierte Inhalt vonKönnen parallele Java 8-Streams einen benutzerdefinierten Thread-Pool nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!