Inhaltsverzeichnis
1. Ideen aussortieren
Um die Idee des Multithreadings besser zu verstehen, müssen wir die Implementierung der folgenden Datenstrukturen, Aufgabenklassen und anderer Prinzipien verstehen.
Warteschlange: PriorityQueue, SynchronousQueue, LinkedBlockingQueue, DelayQueue
Aufgabenplanungs-Thread-Pool: ScheduledThreadPoolExecutor und ThreadPoolTaskScheduler
Andere Thread-Pools: ThreadPoolTaskExecutor und simpleAsyncTaskExecutor
Beschreibung:
ThreadPoolExecutor basiert hauptsächlich auf LinkedBlockingQueue und seinen eigenen Implementierungsmerkmalen.
ThreadPoolTaskExecutor basiert auf ThreadPoolExecutor und kann auch LinkedBlockingQueue [Standard] oder SynchronousQueue [setQueueCapacity () zum Festlegen der Warteschlange] unterstützen. Die
ScheduledThreadPoolExecutor-Klasse basiert hauptsächlich auf ThreadPoolExecutor und der verzögerten Blockierungswarteschlange DelayedWorkQueue.
ThreadPool oolTaskScheduler-Klasse Es basiert auf der ScheduledThreadPoolExecutor-Klasse, um seine eigenen Funktionen zu implementieren.
DelayQueue basiert auf der PriorityQueue-Warteschlange.
[Anmerkungen] Verwandte Themen werden später vorgestellt, um diese Inhalte vorzustellen.
2. Drei Möglichkeiten zur Implementierung von Multithreading
2.1. Implementieren Sie die Runnable-Methode
Wählen Sie diese Methode, wenn die Thread-Aufgabe keinen Wert zurückgeben muss.
public class RunnableTest implements Runnable {
@Override
public void run() {
//实现run()方法
System.out.println(Thread.currentThread() + " thread.");
}
}
-----Starten Sie den Thread
new Thread(new RunnableTest()).start();
-----Oder starten Sie den Thread wie folgt
new Thread(new Runnable() { @Override public void run() {} } ).start ();
2.2. Implementieren Sie eine aufrufbare Methode
Wenn unser Ausführungsthread einen Wert zurückgeben muss, müssen wir uns für die Implementierung der Callable-Klasse entscheiden, da dies derzeit die einzige Möglichkeit ist, einen Wert zurückzugeben. Natürlich müssen wir den Rückgabewert nicht auf diese Weise erhalten.
public class CallableTest implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return