Heim >Java >javaLernprogramm >Thread-Pool in Java
In Java werden Thread-Pools verwendet, um Aufgaben wie die Erstellung, Wartung und Zerstörung von Threads zu verwalten. Der Thread-Pool enthält eine Gruppe von Threads und eine Aufgabenwarteschlange. Wenn eine Aufgabe ausgeführt werden muss, rufen die Threads im Thread-Pool die Aufgabe automatisch ab und führen sie aus Thread-Pool zur Wiederverwendung.
Die Thread-Pool-API in Java stellt eine Executors-Klasse bereit, die uns beim Erstellen eines Thread-Pools hilft, und stellt vier Thread-Pool-Implementierungsmethoden bereit: FixedThreadPool, CachedThreadPool, SingleThreadExecutor und ScheduledThreadPool.
FixedThreadPool
Ein Thread-Pool mit fester Größe. Nur wenn die Anzahl der Arbeits-Threads die Thread-Pool-Größe nicht erreicht, wird ein neuer Thread erstellt, um Aufgaben auszuführen. Der Thread-Pool kann die maximale Anzahl von Threads über den Konstruktor angeben. Wenn nicht angegeben, ist er standardmäßig Integer.MAX_VALUE.
Beispielcode:
ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i < 10; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+" is executing task "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); }
Laufendes Ergebnis:
pool-1-thread-1 is executing task pool-1-thread-3 is executing task pool-1-thread-5 is executing task pool-1-thread-2 is executing task pool-1-thread-4 is executing task pool-1-thread-5 is executing task pool-1-thread-3 is executing task pool-1-thread-1 is executing task pool-1-thread-2 is executing task pool-1-thread-4 is executing task
CachedThreadPool
Cachebarer Thread-Pool. Wenn die Anzahl der Threads die aktuell erforderliche Anzahl überschreitet, werden sie in den Thread-Pool zurückgeführt werden automatisch vernichtet. Wenn im Thread-Pool keine Threads verfügbar sind und eine neue Aufgabe eintrifft, erstellt der Thread-Pool einen neuen Thread, um die Aufgabe auszuführen, bis die Thread-Pool-Größe den Grenzwert von Integer.MAX_VALUE erreicht.
Beispielcode:
ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i < 10; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+" is executing task "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); }
Ausführungsergebnisse:
pool-1-thread-1 is executing task pool-1-thread-2 is executing task pool-1-thread-3 is executing task pool-1-thread-4 is executing task pool-1-thread-5 is executing task pool-1-thread-6 is executing task pool-1-thread-7 is executing task pool-1-thread-8 is executing task pool-1-thread-9 is executing task pool-1-thread-10 is executing task
SingleThreadExecutor
Ein Single-Thread-Thread-Pool mit nur einem Worker-Thread kann sicherstellen, dass alle Aufgaben in der angegebenen Reihenfolge (FIFO, LIFO, Priorität usw.) ausgeführt werden. , was einem speziellen FixedThreadPool entspricht.
Beispielcode:
ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+" is executing task "); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }); }
Laufergebnisse:
pool-1-thread-1 is executing task pool-1-thread-1 is executing task pool-1-thread-1 is executing task ......
ScheduledThreadPool
Der geplante Thread-Pool kann Aufgaben gemäß der angegebenen Verzögerungszeit oder periodisch ausführen und geplante Aufgaben oder periodische Aufgaben implementieren. Die Größe des Thread-Pools kann angegeben werden. Wenn nicht angegeben, ist sie standardmäßig Integer.MAX_VALUE.
Beispielcode:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3); ScheduledFuture<?> future = scheduledExecutorService.schedule(()->{ System.out.println(Thread.currentThread().getName()+" is executing delay task "); }, 5, TimeUnit.SECONDS); scheduledExecutorService.scheduleAtFixedRate(()->{ System.out.println(Thread.currentThread().getName()+" is executing periodic task "); }, 2, 3, TimeUnit.SECONDS);
Laufende Ergebnisse:
pool-1-thread-1 is executing periodic task pool-1-thread-2 is executing periodic task pool-1-thread-3 is executing periodic task pool-1-thread-1 is executing periodic task pool-1-thread-3 is executing periodic task pool-1-thread-2 is executing periodic task pool-1-thread-3 is executing periodic task pool-1-thread-2 is executing periodic task ...... pool-1-thread-1 is executing delay task
Zusammenfassung
Thread-Pool ist ein äußerst wichtiges Konzept in der Multithread-Entwicklung, das den Aufwand für die Thread-Erstellung, -Zerstörung und den Kontextwechsel effektiv reduzieren und die Systemleistung und Wartbarkeit verbessern kann . Java stellt die Executors-Klasse zum einfachen Erstellen von Thread-Pools bereit und bietet verschiedene Implementierungsmethoden für den Umgang mit unterschiedlichen Anwendungsszenarien. Wenn Entwickler Thread-Pools verwenden, müssen sie basierend auf den spezifischen Anforderungen und Lastbedingungen eine geeignete Implementierungsmethode auswählen, um die beste Leistung und die besten Effekte zu erzielen.
Das obige ist der detaillierte Inhalt vonThread-Pool in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!