Java Thread Pool Executorservice
1. Fadenpool
1.1 Unter welchen Umständen verwenden Sie Thread Pool?
1.2 Vorteile der Verwendung von Threadpools
2.Executorservice und Testamentsvollstrecker
2.1 Einführung
Executorservice ist eine Schnittstelle, die Executor erbt.
Öffentliche Schnittstelle ExecutorService erweitert Executor {}Executor ist auch eine Schnittstelle, die nur eine Methode enthält:
public interface Executor {void execute (runnable Command);} Die obere Schnittstelle des Thread-Pools in Java ist Excutor, aber streng genommen >> Exector ist kein Thread-Pool, sondern nur ein Werkzeug zum Ausführen von Threads. Die reale Thread> Pool -Schnittstelle ist Executorservice.
3.executors
Es ist eine statische Fabrikklasse, die verschiedene Arten von Threadpools erzeugen kann, und einige der Quellcodes sind wie folgt:
public class Executors {// newfixed threadpoolpublic static ExecutorService Newfixed threadpool (int nthreads) {return neuer Threadpoolexecutor (Nthreads, Nthreads, 0l, TimeUnit.Milliseconds, New LinkedBlockingQueue <runnable> () ()} // NewcachetheLingSconue <Runnable> ();} // NewcachheLeadpools strukturiert> () ();} // NewcachheLeadpools strukturiert> () ();} // Newcachheadhrocks -öffentlicher staatsantrieb> ());} // NewcachheLeadpools strukturiert> ();} // Newcachheadhrocks -öffentlicher Acuvithor; ·} // Newcachheadhrocks. newCachedThreadpool () {Neue threadpoolexecutor zurückgeben (0, Integer.max_value, 60L, TimeUnit.Seconds, New SynchronoSqueue <Runnable> ()); } // NewScheduled threadpool public static afuledexecutorService NewsschonedThreadpool (int corepoolSize) {return New ScheduledThreadpoolexecutor (CorepoolSize); } // NewStringooo}Schauen wir uns zunächst ein bestimmtes Beispiel an und verwenden Sie Beispiele, um die Ähnlichkeiten und Unterschiede zwischen ihnen zu veranschaulichen.
Paket-Thread; importieren java.util.concurrent */public class ch09_executor {private static void run (ExecutorService threadpool) {für (int i = 1; i <5; i ++) {endgültig int taskId = i; threadpool.execute (new Runnable () {@Override public void run () {for (int i = 1; i <5; i ++) {try {thread.sleep (20);} catch (interruptedException e) {E.printstacktrace ();} system.out.println ("+askId+" "askId+" "ask." threadpool.shutdown (); // Erstellen Sie einen Thread -Pool eines einzelnen Threads. plantedThreadpool = Executors.NewScheduledThreadpool (3); // (2) // run (Singlethreadpool); // (3) // run (plantedThreadpool); // (4)}}4. 4 häufig verwendete Fadenpools
4.1 CachedThreadpool
CachedThreadpool erstellt einen Cache -Bereich, der den initialisierten Thread zwischengespeichert, Threads endet und entfernt, die 6 Sekunden lang nicht aus dem Cache verwendet wurden.
Wenn der Thread verfügbar ist, verwenden Sie den zuvor erstellten Thread. Wenn der Thread nicht verfügbar ist, erstellen Sie einen neuen Thread.
.Wiederverwendung:
Cache-Pool, prüfen Sie zunächst, ob im Pool Threads erstellt wurden. Wenn es einen gibt, wiederverwenden. Wenn es niemanden gibt, erstellen Sie einen neuen Thread und fügen Sie ihn dem Pool hinzu.
Szenarien verwenden:
Cache-Pools werden normalerweise verwendet, um einige asynchrone Aufgaben mit kurzen Lebensdauer auszuführen, sodass sie in einigen verbindungsorientierten Servern vom Typ Daemon nicht viel verwendet werden.
Auszeit:
Der Thread, der wiederverwendet werden kann, muss ein Thread im Pool innerhalb des Zeitlimits im Leerlauf sein. Das Standard -Timeout beträgt 60er Jahre. Wenn die Dauer dieses Leerlaufs überschritten wird, wird die Thread -Instanz beendet und der Pool entfernt.
Beenden:
Der Faden, der in das zwischengespeicherte Threadpool eingebaut wurde, muss sich keine Sorgen um sein Ende machen. Wenn es nach der Zeitüberschreitung inaktiv ist, wird es automatisch beendet.
Beispiel Erklärung:
Entfernen Sie die Kommentare von (2) und führen Sie sie aus. Das Ergebnis der Operation ist wie folgt:
The first time of the first task, the third time of the third task, the third time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the third time of the third time of the second time of the second time of the second time of the third time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the fourth time of the fourth time of the fourth time of the first task, the Viertes Mal des vierten Males der vierten Zeit der ersten Aufgabe, der vierten Malzeit des vierten Mals der ersten Aufgabe, der vierten Zeit des vierten Mal
Aus den Ergebnissen ist ersichtlich, dass die 4 Aufgaben abwechselnd ausgeführt werden.
4.2Fixed threadpool
In PerisiwerThreadpool gibt es einen Pool fester Größe.
Wenn die derzeit ausgeführten Aufgaben die Poolgröße überschreiten müssen, befinden sich viele ausgehende Aufgaben in einem Wartezustand, bis es kostenlose Threads gibt, um die Aufgaben auszuführen.
Wenn die derzeit ausgeführte Aufgabe kleiner als die Poolgröße ist, wird der Leerlauf -Thread nicht zerstört.
Wiederverwendung:
FesteThreadpool ähnelt Cachethreadpool und kann auch verwendet werden, wenn es wiederverwendet werden kann. Sie können jedoch zu keinem Zeitpunkt neue Threads erstellen.
Feste Nummer
Seine Einzigartigkeit ist, dass es zu jedem Zeitpunkt nur eine feste Anzahl aktiver Threads geben kann. Zu diesem Zeitpunkt kann er nur in einer anderen Warteschlange platziert werden, wenn ein neuer Thread festgelegt wird, und warten, bis ein Thread im aktuellen Thread endet und direkt aus dem Pool verschoben wird.
Auszeit:
Im Gegensatz zu Cachethreadpool hat es keinen Leerlaufmechanismus
Szenarien verwenden:
Daher richtet sich der größte Teilthreadpool auf einige sehr stabile und feste regelmäßige gleichzeitige Threads und wird hauptsächlich auf Servern verwendet
Quellcodeanalyse:
Nach dem Quellcode der Methode zu urteilen, rufen der Cache -Pool und der feste Pool den gleichen zugrunde liegenden Pool auf, die Parameter sind jedoch unterschiedlich.
Die feste Pool -Thread -Anzahl ist festgelegt und beträgt 0 Sekunden im Leerlauf (kein Leerlauf)
Die Anzahl der Cache-Pool-Threads unterstützt 0-Integer.max_Value (offensichtlich wird die Ressourcentoleranz des Hosts überhaupt nicht berücksichtigt), 60 Sekunden im Leerlauf
Beispiel Erklärung:
Entfernen Sie die Kommentare von (1), und das laufende Ergebnis ist wie folgt:
Das erste Mal der ersten Aufgabe, das dritte Mal des dritten Mals der ersten Aufgabe, das dritte Mal des zweiten Males der zweiten Aufgabe, das dritte Mal des zweiten Males des zweiten Males der zweiten Aufgabe, das dritte Mal des zweiten Mals des zweiten Mals zum zweiten Mal in der zweiten Zeitzeitzeitzeitzeitzeitzeitzeit des zweiten Mals zum zweiten Mal im zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal zum zweiten Mal in der zweiten Zeitzeitzeitzeitzeitzeitzeitzeit gebracht, wurde er erstmals. time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the second time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the fourth time of the Viertes Mal der vierten Malzeit des vierten Males der vierten Malzeit des vierten Males der vierten Malzeit des vierten Males des vierten Males des vierten Males des vierten Males, im vierten Mal in der vierten Zeit Von der vierten Malzeit des vierten Males der vierten Malzeit des vierten Males der vierten Malzeit des vierten Males des vierten Males des vierten Males des vierten Males der vierten Malzeit des vierten Males des vierten Males des vierten Males des vierten Males, im vierten Mal in der vierten Mal Viertes Mal der vierten Malzeit des vierten Males der vierten Malzeit des vierten Males der vierten Malzeit des vierten Males des vierten Males des vierten Males des vierten Males, im vierten Mal in der vierten Zeit des vierten Males
Ein Threadpool mit fester Größe wurde mit einer Kapazität von 3 erstellt und dann wurden 4 Aufgaben in einer Schleife ausgeführt. Aus den Ausgabergebnissen ist ersichtlich, dass zuerst die ersten drei Aufgaben ausgeführt wurden und die Leerlauf -Threads die vierte Aufgabe ausführten.
4.3singlethreadexecutor
Entfernen Sie (3) Kommentare. Siehe das Ausführungsergebnis wie folgt:
The first task of the first task of the first task of the second task of the first task of the third task of the first task of the fourth task of the second task of the second task of the second task of the second task of the second task of the second task of the second task of the third task of the third task of the third task of the third task of the third task of the third task of the third task of the third task of the fourth task of the fourth task of the fourth task of the fourth task of the fourth task of die vierte Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe der vierten Aufgabe jedoch der vierten Aufgabe jedoch der vierten Aufgabe jedoch der vierten Aufgabe jedoch der vierten Aufgabe jedoch der vierte vierte
Die vier Aufgaben werden nacheinander ausgeführt.
4.4 geplanter Threadpool
ScheduledThreadpool ist ein Threadpool mit fester Größe. Ähnlich wie bei Lifthreadpool sind die ausgeführten Aufgaben zeitgesteuerte Aufgaben.
Das Ergebnis, das durch Entfernen der Annotation von (4) erzielt wird, ist das gleiche wie das Ergebnis, das durch Festthreadpool erhalten wurde. Der Hauptgrund für geplante Threadpool ist nicht hier, sondern eine zeitgesteuerte Aufgabe. Siehe das folgende Beispiel:
Paket-Thread; importieren java.util.concurrent.executors; import java.util.concurrent */public class myScheduledTask implementiert runnable {private String tName; public myScheduledTask (String -Name) {this.tname = name; } public void run () {System.out.println (tName+"Task -Delay -Ausführung 2 Sekunden!"); } public static void main (String [] args) {planedexecutorService enderpool = Executors.NewScheduledThreadpool (2); EnderedexecutorService singSchudepool = Executors.newsinglethreadScheduledexecutor (); MyScheduledTask Mt1 = New MyScheduledTask ("Mt1"); MyScheduledTask MT2 = New MyScheduledTask ("Mt2"); // Die MT1 -Aufgabe mit enderThreadpool starten, um enderpool.schedule (MT1,2, TimeUnit.seconds) auszuführen; // MT2 mit SingleScheduled threadpool starten; SINGSCHELLEPOOL.SCHELLE (MT2,2000, TIMEUnit.Milliseconds); planedpool.shutdown (); SINGSCHELLEPOOL.SHUTDOWN (); }}Ergebnis:
Die MT1 -Aufgabe verzögerte sich um 2 Sekunden, um auszuführen! Die MT2 -Aufgabe verzögerte sich um 2 Sekunden, um auszuführen!
Das Ergebnis wird nicht angezeigt, nachdem das Programm 2 Sekunden lang ausgeführt wurde, was darauf hinweist, dass der Thread nach 2 Sekunden ausgeführt wurde.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!