suchen
HeimJavajavaLernprogrammWie kann ich benutzerdefinierte Thread-Pools mit parallelen Java 8-Streams verwenden?

How Can I Use Custom Thread Pools with Java 8 Parallel Streams?

Anpassbare Thread-Pools in Java 8 Parallel Streams

Die Steuerung der Thread-Ressourcenzuteilung innerhalb paralleler Streams verbessert die Anwendungsleistung und Modularität. Es bleibt jedoch unklar, wie benutzerdefinierte Thread-Pools für bestimmte Stream-Vorgänge in Java 8 festgelegt werden.

Dieser Artikel untersucht das Problem und bietet eine Lösung, mit der die Einschränkung gemeinsamer Thread-Pools in parallelen Streams überwunden wird.

Problemstellung

Stellen Sie sich eine Serveranwendung vor, die parallele Streams nutzt. Um zu verhindern, dass sich träge Aufgaben innerhalb eines Moduls auf andere auswirken, ist eine Aufteilung des Thread-Pools erwünscht. Die standardmäßige Parallel-Stream-Implementierung verwendet jedoch einen gemeinsamen Thread-Pool für alle Vorgänge.

Wie das folgende Code-Snippet zeigt, verzögert eine kompromittierte Aufgabe andere Threads auf unbestimmte Zeit:

// CPU-intensive tasks in separate threads leveraging parallel streams
ExecutorService es = Executors.newCachedThreadPool();

es.execute(() -> runTask(1000)); // Incorrect task
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));

Lösung

Um parallele Vorgänge innerhalb eines bestimmten Fork-Join-Pools auszuführen, verwenden Sie ihn als Aufgabe darin der Pool. Dadurch wird der Vorgang vom gemeinsam genutzten Pool isoliert:

final int parallelism = 4;
ForkJoinPool forkJoinPool = null;
try {
    forkJoinPool = new ForkJoinPool(parallelism);
    final List<integer> primes = forkJoinPool.submit(() -> {
        // Parallel task here, for example:
        return IntStream.range(1, 1_000_000).parallel()
                .filter(PrimesPrint::isPrime)
                .boxed()
                .collect(Collectors.toList());
    }).get();
    System.out.println(primes);
} catch (Exception e) {
    throw new RuntimeException(e);
} finally {
    if (forkJoinPool != null) {
        forkJoinPool.shutdown();
    }
}</integer>

Diese Technik nutzt das Verhalten von ForkJoinTask.fork(): „Führen Sie diese Aufgabe asynchron in dem Pool aus, in dem die aktuelle Aufgabe ausgeführt wird (sofern zutreffend) oder den sie verwendet der ForkJoinPool.commonPool(), wenn nicht in ForkJoinPool()."

Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Thread-Pools mit parallelen Java 8-Streams verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor