Was veranlasst uns, Threadpools zu verwenden?
Ich persönlich denke, der Hauptgrund ist: Es gibt viele Aufgaben, die in kurzer Zeit bearbeitet werden müssen.
Vorteile der Verwendung von Threadpools:
1. Reduzieren Sie die Zeit für die Erstellung und Zerstörung von Fäden und den Aufwand von Systemressourcen
2. Wenn Sie keine Threadpools verwenden, kann das System eine große Anzahl von Threads erstellen und den Systemspeicher konsumieren.
Im Folgenden finden Sie mehrere Thread -Pools, die mit Java geliefert werden:
1. Newfixed threadpool erstellt einen Thread -Pool mit der angegebenen Anzahl von Arbeiterfäden.
Wenn eine Aufgabe eingereicht wird, wird ein Arbeiter -Thread erstellt.
2. NewcachedThreadpool erstellt einen zwischengespeicherbaren Fadenpool.
Diese Art von Thread -Pool -Funktionen:
1).
2). Wenn Sie nach der Kündigung erneut eine neue Aufgabe einreichen, erstellt der Thread -Pool einen Arbeiter -Thread.
3. NewsingLethreadExecutor erstellt einen Einzelzeug-Ausführenden, dh nur einen einzigartigen Arbeiter-Thread, um die Aufgabe auszuführen.
Das größte Merkmal eines einzelnen Worker -Threads ist, dass jede Aufgabe nacheinander ausgeführt wird und dass zu einem bestimmten Zeitpunkt keine Mehrfachfäden aktiv sind.
V.
Zusammenfassen:
1. definitthreadpool ist ein typischer und ausgezeichneter Fadenpool, der die Vorteile des Fadenpools verbessert und die Programmeffizienz des Programms spart, die beim Erstellen von Fäden verbraucht werden. Wenn der Thread -Pool im Leerlauf ist, dh wenn es keine ausgeführten Aufgaben im Thread -Pool gibt, wird der Arbeiter -Thread nicht freigegeben und belegen auch bestimmte Systemressourcen.
zwei. Das Merkmal von CachedThreadpool ist, dass wenn der Thread -Pool im Leerlauf ist, dh wenn es keine ausgeführten Aufgaben im Thread -Pool gibt, wird der Arbeiter -Thread freigelassen, wodurch die vom Arbeiter -Thread besetzten Ressourcen befreien. Wenn jedoch eine neue Aufgabe erscheint, muss ein neuer Arbeiter -Thread erstellt werden und ein bestimmter Systemaufwand ist erforderlich. Bei der Verwendung von CachedThreadpool müssen Sie außerdem darauf achten, die Anzahl der Aufgaben zu kontrollieren, da eine große Anzahl von Threads gleichzeitig ausgeführt wird, das System gelähmt wird.
Java Thread Pool ThreadPoolexecutor -Nutzungsbeispiel
Paket Com.Sondon.Mayi.jpool; . * Threadpoolexecutor (* int corepoolSize, // die minimale Anzahl der mit dem Threadpool verwalteten Threads* int maximumpoolsize, // die maximale Anzahl von Threads, die durch Thread -Pool verwaltet werden // Gewindepool Verwalten Sie die Freizeiteinheit, die durch den Thread* BlockingQueue <Runnable> WorkQueue, // die vom Thread Pool verwendete Pufferwarteschlange* abgelehnt wurde. Neue ThreadPoolexecutor (5, 10, 3, TimeUnit.seconds, New ArrayBlockingQueue <Runnable> (10), neuer ThreadPoolexecutor.DiscardoldestPolicy ()); Erstellen Sie eine Aufgabe und übertragen Sie es mit Thread Pool String Task = "Task ---" + i; ); .Sleep (3000); . {Testen Sie verschiedene Threads -Poolmodus} */ public void testnewcached threadpool () {Threadpoolexecutor Threadpool = (ThreadPoolexecutor) ) Executors.Newsc HeduledThreadpool (100); Pool String Task = "Task--" + i; ProducTasksleept IME); : "+threadpool.getpoolsize ()); / /Anzahl der Threads in Thread Pool System.out.println (" Active Count: "+Threadpool.getActiveCount (); // Anzahl der aktiven Threads im Threadpool} catch (InterruptedException e) {e.printstacktr ace (); */ public void testnewcached threadpool_call fähle () {ExecutorService ES = Executors.NewFixedThreadpool (10); ("Callable Ergebnis:"+Ergebnis); InterruptedException |. Implementiert runnable {private s tatic int ConsumptasksLeptime = 2000; ("Start .." + ThreadPooltaskdata); Objekt Gettask () {ret Urn this.threadpooltaskdata; implementiert Callable <T> {@Override public t call () Ausnahme {System.out.println ("Start Callable");