ThreadPoolExecutor – 1

„Normale Programmierer kommen früher oder später mit der Tatsache zurecht, dass sie viele kleine Aufgaben haben, die von Zeit zu Zeit erledigt werden müssen.“

„Wenn man ein Spiel schreibt, dann sind es die Aktionen, die einzelne Charaktere ausführen.“

„Wenn Sie einen Webserver schreiben, dann sind es verschiedene Befehle, die von Benutzern eingehen: ein Foto hochladen, es in das gewünschte Format umwandeln, die gewünschte Vorlage anwenden usw.“

„Früher oder später werden alle großen Aufgaben in kleine, überschaubare Aufgaben aufgeteilt.“

„In diesem Kontext stellt sich also eine subtile Frage: Wie soll man sie alle verwalten? Was ist, wenn man mehrere hundert Aufgaben in einer Minute ausführen muss? Es würde wenig Sinn machen, für jede Aufgabe einen Thread zu erstellen. Die Java-Maschine.“ weist jedem Thread ziemlich viele Ressourcen zu.

„Mit anderen Worten: Das Erstellen und Zerstören eines Threads kann mehr Zeit und Ressourcen in Anspruch nehmen als die Aufgabe selbst.“

„Die Entwickler von Java haben eine elegante Lösung für dieses Problem gefunden: ThreadPoolExecutor .

ThreadPoolExecutor ist eine Klasse mit zwei Dingen darin:“

A)  Eine Aufgabenwarteschlange, zu der Sie Aufgaben hinzufügen können, sobald sie im Programm auftreten.

B) Ein Thread-Pool, bei dem es sich um eine Gruppe von Threads handelt, die diese Aufgaben ausführen.

„Außerdem werden die Threads nicht zerstört, sobald eine Aufgabe erledigt ist. Stattdessen schlafen sie ein, um bereit zu sein, eine neue Aufgabe zu starten, sobald sie erscheint.“

„Wenn Sie einen ThreadPoolExecutor erstellen , können Sie die maximale Anzahl der zu erstellenden Threads und die maximale Anzahl der Aufgaben festlegen, die in die Warteschlange gestellt werden können. Mit anderen Worten, Sie können die Anzahl der Threads beispielsweise auf 10 begrenzen und die Anzahl der Aufgaben in der Warteschlange auf 100.

„So funktioniert ThreadPoolExecutor :“

1)  Wenn Sie eine neue Aufgabe hinzufügen, wird diese am Ende der Warteschlange platziert.

2)  Wenn die Warteschlange voll ist, wird eine Ausnahme ausgelöst.

3)  Nach Abschluss einer Aufgabe nimmt jeder Thread die nächste Aufgabe aus der Warteschlange und beginnt mit deren Ausführung.

4) Wenn sich keine Aufgaben in der Warteschlange befinden, geht ein Thread in den Ruhezustand, bis neue Aufgaben hinzugefügt werden.

„Der Ansatz, bei dem wir die Anzahl der Arbeitsthreads begrenzen, hat den Vorteil, dass je mehr Threads wir haben, desto stärker stören sie sich gegenseitig. Es ist viel effektiver, 5–10 Arbeitsthreads und eine lange Aufgabenwarteschlange zu haben als.“ um 100 Threads für eine Flut von Aufgaben zu erstellen, die miteinander um Ressourcen konkurrieren: Speicher, Prozessorzeit, Datenbankzugriff usw.

„Hier ist ein Beispiel für ThreadPoolExecutor in Aktion:“

Beispiel
ExecutorService service = Executors.newFixedThreadPool(2);

for(int i = 0; i < 10; i++)
{
 service.submit(new Runnable() {
    public void run()
    {
     // Here we download something big from the Internet.
    }
 });
}

„Äh, ich sehe es nicht…“

„Ein ThreadPoolExecutor- Objekt wird erstellt, wenn die newFixedThreadPool-Methode aufgerufen wird.“

Es ist also sehr einfach zu bedienen. Sobald Sie mit der Submit-Methode eine Aufgabe hinzufügen, geschieht Folgendes:

A)  Weckt einen schlafenden Thread auf, falls vorhanden, um die Aufgabe auszuführen.

B)  Wenn kein wartender Thread vorhanden ist, wird ein neuer Thread für die Aufgabe erstellt.

C)  Wenn die maximale Anzahl an Threads erreicht ist, wird die Aufgabe einfach an das Ende der Warteschlange gestellt.

„Ich habe bewusst „Hier laden wir etwas Großes aus dem Internet herunter“ in das Beispiel eingefügt. Wenn wir 100 Aufgaben „Laden etwas Großes aus dem Internet herunter“ haben, dann macht es keinen Sinn, viele davon gleichzeitig auszuführen – wir“ Wird durch die Bandbreitenbeschränkung unserer Internetverbindung gebremst. In diesem Fall sollten ein paar Threads ausreichen. Das sehen Sie im obigen Beispiel:

ExecutorService service = Executors.newFixedThreadPool(2);

„Es stellt sich heraus, dass die Arbeit mit einer Reihe von Aufgaben gar nicht so schwierig ist.“

„Ja. Noch einfacher, als du dir vorstellen kannst. Aber Kim wird dir davon erzählen.“