Ich habe Multithreading in vielen meiner Anwendungen verwendet. Während ich mehr las, stieß ich auf ThreadPoolExecutors
. Ich konnte nicht zwischen den beiden Szenarien unterscheiden.
Ich verstehe immer noch, dass ich Multithreading verwenden sollte, wenn ich eine Aufgabe habe, die ich in mehrere kleine Aufgaben aufteilen möchte, um die CPU zu nutzen und die Arbeit schneller zu erledigen. Und benutze ThreadPoolExecutor
, wenn ich auf Aufgaben eingestellt bin und jede Aufgabe unabhängig voneinander ausgeführt werden kann.
Bitte korrigieren Sie mich, wenn ich falsch liege. Danke
A ThreadPoolExecutor
ist nur eine API auf hoher Ebene, mit der Sie Tasks in mehreren Threads ausführen können, ohne sich mit der Thread API auf niedriger Ebene befassen zu müssen. Es ist also nicht wirklich sinnvoll zwischen Multithreading und ThreadPoolExecutor zu unterscheiden.
Es gibt viele Varianten von ThreadPoolExecutor
s, aber die meisten von ihnen erlauben mehr als einen Thread parallel zu laufen. Normalerweise würden Sie einen Executor Service verwenden und den Executors
factory.
Beispiel: ExecutorService executor = Executors.newFixedThreadPool(10);
führt die Aufgaben aus, die Sie in 10 Threads einreichen.
ThreadPoolExecutor
ist eine Möglichkeit Multithreading durchzuführen. Es wird normalerweise verwendet, wenn Sie
Java 7 hat eine weitere eingebaute Klasse namens ForkJoinPool
, die normalerweise für Map-Reduce-Operationen verwendet wird. Zum Beispiel kann man sich vorstellen, eine Merge-Sortierung unter Verwendung eines ForkJoinPools zu implementieren, indem das Array an jedem Verzweigungspunkt in 1/2 geteilt wird, auf die Ergebnisse gewartet wird und die Ergebnisse zusammengeführt werden.
Thread-Pools (Executoren) sind eine Form von Multithreading, speziell eine Implementierung des Single-Producer-Multiple-Consumer-Musters, bei der ein Thread wiederholt Arbeit in eine Warteschlange für ein Team von Worker-Threads zur Ausführung bringt. Es wird mit regulären Threads implementiert und bringt mehrere Vorteile:
Vor diesem Hintergrund ist es richtig, dass Pools für Aufgaben geeignet sind, die normalerweise voneinander unabhängig und in der Regel kurzlebig sind (lange I / O-Operationen binden nur Threads aus dem Pool, die nicht in der Lage sind) andere Aufgaben erledigen).
ThreadPoolExecutor ist eine Form des Multithreading, mit einer einfacheren API als die direkte Verwendung von Threads, wo Sie tatsächlich Aufgaben übergeben. Aufgaben können jedoch andere Aufgaben übermitteln, sodass sie nicht unabhängig sein müssen. Was die Aufgabenteilung in Teilaufgaben betrifft, denken Sie vielleicht an die neue fork / join API in JDK7.
Aus der Quellcodedokumentation von ThreadPoolExecutor
ThreadPoolExecutor
ist eine Möglichkeit, Nebenläufigkeit zu erreichen. Es gibt viele Möglichkeiten, Nebenläufigkeit zu erreichen:
Executors bietet verschiedene APIs. Einige wichtige APIs sind unten aufgeführt.
%Vor%%Vor%Erzeugt einen Thread-Pool, der eine festgelegte Anzahl von Threads wiederverwendet, die von einer gemeinsam genutzten, nicht verbundenen Warteschlange aus arbeiten.
%Vor%Erstellt einen Thread-Pool, der bei Bedarf neue Threads erstellt, aber zuvor erstellte Threads wieder verwendet, wenn sie verfügbar sind.
%Vor%Erzeugt einen Thread-Pool, der Befehle zur Ausführung nach einer bestimmten Verzögerung oder zur periodischen Ausführung planen kann.
Erstellt einen Work-Stealing-Threadpool mit allen verfügbaren Prozessoren als Zielparallelitätsebene.
Sehen Sie sich unter SE Fragen an:
Tags und Links java multithreading threadpoolexecutor java.util.concurrent