1 Gründe für die Einführung von Threadpools
Da der Lebenszyklus eines Fadens die Erschaffung, bereit, laufend, blockiert und zerstören, können wir, wenn die Anzahl der anhängigen Aufgaben klein ist, mehrere Fäden selbst erstellen, um die entsprechenden Aufgaben zu erledigen, aber wenn es eine große Zahl gibt Aufgaben, das Erstellen und Zerstören von Threads erfordert eine Menge Overhead, und die Verwendung von Fadenpools lindert diese Probleme erheblich.
2 Verwendung des Threadpools
Wir müssen nur die statische Methode verwenden, die von der Ausführungsklasse bereitgestellt wird, um den entsprechenden Threadpool zu erstellen:
Öffentliche statische Executorsevice NewsingLethreadExecutor () öffentlich statische Executorsevice Newfixed threadpool () öffentlich statische Executorsevice NewcachedTheThe adpool ()
NewsingLethreadexecutor gibt einen Testamentsvollstrecker mit einem einzigen Thread zurück.
NeufixedThreadpool gibt einen Thread -Pool mit einer bestimmten Anzahl von Threads zurück.
NewcachedThreadpool erstellt entsprechende Threads basierend auf der Anzahl der Aufgaben des Benutzers.
Wir müssen nur die Aufgabe in die Auslaufmethode einfügen und die Implementierungsklasse der Runnable -Schnittstelle zur Ausführungsmethode des Thread -Pools als Parameter übergeben, wie unten gezeigt:
Executor Executor = Executors.
Wenn Sie Parameter an die Aufgabe übergeben müssen, können Sie dies tun, indem Sie eine Implementierungsklasse für die Runnable -Schnittstelle erstellen.
3. Beispiel
(1): NewsinglethreadExecutor
Mythead.java
publicCassMyThread erweitert Thread {@Override publicVoid run () {System.out.println (Thread.currentThread (). GetName () + "Ausführung ..."); {// Erstellen Sie einen Thread -Pool, der die feste Anzahl von Threads wiederverwenden kann. ; pool.execu te (t2); Ausgangsergebnis
Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . .
(2): NeufixedThreadpool
TestfixedThreadpool.java
publicClass testfixed threadpool {publicStaticVoid main (String [] args) {// Erstellen Sie einen Thread -Pool, der die feste Anzahl von Threads wiederverwenden kann. Runnable -Thread T1 = neuer MyThread (); der Pool ausführen. }} Ausgangsergebnis
Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-2 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-2 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . .
(3): NewcachedThreadpool
TestcachedThreadpool.java
publicClass testcached threadpool {publicStaticVoid main (String [] args) {// Erstellen Sie einen Thread -Pool, der die feste Anzahl von Threads wiederverwenden kann. Runnable -Thread t1 = neuer MyThread () Thread t2 = neuer MyThread (); Ausführen in Pool.execute (T1); } Ausgangsergebnis:
Pool-1-Thread-2 wird ausgeführt. . . Pool-1-Thread-4 wird ausgeführt. . . Pool-1-Thread-3 wird ausgeführt. . . Pool-1-Thread-1 wird ausgeführt. . . Pool-1-Thread-5 wird ausgeführt. . .
(4): Newsschoned threadpool
TestsPeduled threadpoolexecutor.java
publicClass testseduled threadpoolexecutor {publicStaticVoid main (String [] args) {teplanedThreadpoolexecutor exec = new ScheduledThreadpoolexecut tor (1); Neue RunTimeException (); ====================================================== ============ Runna Ble () {// Drucken Sie die Systemzeit von Zeit zu Zeit und beweisen, dass die beiden keinen Einfluss auf einander haben @Override publicVoid run () {System.out.println (System.nanotime ()); Ausgangsergebnis
====================================================== ====================================================== ====================================================== ====================================================== ====================================================== =====