Java-Thread-Pool-Framework
In diesem Artikel werden hauptsächlich die relevanten Kenntnisse des Java-Thread-Pool-Frameworks vorgestellt. Es hat einen sehr guten Referenzwert, schauen wir es uns mit dem Editor unten an
1. Thread-Pool-Strukturdiagramm
2. Beispiel
Thread-Schnittstelle definieren
public class MyThread extends Thread { @Override publicvoid run() { System.out.println(Thread.currentThread().getName() + "正在执行"); } }
1: newSingleThreadExecutor
ExecutorService pool = Executors. newSingleThreadExecutor(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); //关闭线程池 pool.shutdown();
Eingabeergebnis:
pool-1-thread-1正在执行 pool-1-thread-1正在执行 pool-1-thread-1正在执行
2: newFixedThreadPool
ExecutorService pool = Executors.newFixedThreadPool(3); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); pool.shutdown();
Eingabeergebnis:
pool-1-thread-1正在执行 pool-1-thread-2正在执行 pool-1-thread-1正在执行 pool-1-thread-2正在执行
3 :newCachedThreadPool
ExecutorService pool = Executors.newCachedThreadPool(); Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); //将线程放入池中进行执行 pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5); //关闭线程池 pool.shutdown();
Eingabeergebnis:
pool-1-thread-2正在执行 pool-1-thread-4正在执行 pool-1-thread-3正在执行 pool-1-thread-1正在执行 pool-1-thread-5正在执行
4 :ScheduledThreadPoolExecutor
ScheduledExecutorService pool = Executors.newScheduledThreadPool(2); pool.scheduleAtFixedRate(new Runnable() {//每隔一段时间就触发异常 @Override public void run() { //throw new RuntimeException(); System.out.println("================"); } }, 1000, 2000, TimeUnit.MILLISECONDS); pool.scheduleAtFixedRate(new Runnable() {//每隔一段时间打印系统时间,证明两者是互不影响的 @Override public void run() { System.out.println("+++++++++++++++++"); } }, 1000, 2000, TimeUnit.MILLISECONDS);
Eingabeergebnis:
================ +++++++++++++++++ +++++++++++++++++ +++++++++++++++++
3. Thread-Pool-Kernparameter
corePoolSize: im Pool Anzahl der Kernthreads
maximumPoolSize: Die maximal zulässige Anzahl von Threads im Pool.
keepAliveTime: Wenn die Anzahl der Threads größer als der Kern ist, ist dies die maximale Zeit, die überschüssige Threads im Leerlauf auf neue Aufgaben warten, bevor sie beendet werden.
Einheit: Die Zeiteinheit des keepAliveTime-Parameters.
workQueue: Warteschlange, in der Aufgaben vor der Ausführung gehalten werden. Diese Warteschlange enthält nur ausführbare Aufgaben, die von der Ausführungsmethode übermittelt werden.
threadFactory: Factory, die vom Executor zum Erstellen neuer Threads verwendet wird.
Handler: Handler, der verwendet wird, wenn die Ausführung aufgrund einer Überschreitung des Thread-Bereichs und der Warteschlangenkapazität blockiert wird.
ThreadPoolExecutor: Die zugrunde liegende Implementierung der Executors-Klasse.
3.1 Aufgabenwarteschlangenmechanismus
SynchonousQueue: Synchrone Warteschlange, die Warteschlange wird direkt zur Ausführung an den Thread übermittelt, ohne sie zu warten , der Thread-Pool ist normalerweise unbegrenzt
LinkedBlockingQueue: Unbegrenzte Warteschlange Wenn die Anzahl der Thread-Pool-Threads die maximale Anzahl erreicht, warten neue Aufgaben in der Warteschlange auf die Ausführung, was dazu führen kann, dass die Warteschlange unendlich erweitert wird
ArrayBlockingQueue: Bounded Queue hilft, die Erschöpfung der Ressourcen zu verhindern. Sobald die Obergrenze erreicht ist, können neue Aufgaben verloren gehen
Hinweis:
Use of newSingleThreadExecutor and newFixedThreadPool is LinkedBlockingQueue
newCachedThreadPool uses SynchonousQueue
newScheduledThreadPool uses DelayedWorkQueue
3.2 Thread execution process
3.3 Thread-Größenbestimmung:
CPU-intensiv: Öffne so wenig Threads wie möglich, die optimale Anzahl Anzahl der Threads ist Ncpu+ 1
io-intensiv: mehrere Threads, 2Ncpu
Gemischt: Je nach Situation kann es in io-intensiv und Cou-intensiv aufgeteilt werden
Weitere Java-Thread-Pools Für Framework-bezogene Artikel beachten Sie bitte die chinesische PHP-Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.
