[Multithread-Programmierung] --- Eine kurze Einführung in Multithreading

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 

Guess you like

Origin blog.csdn.net/xunmengyou1990/article/details/108307128#comments_25079940