Multithreading-Implementierungsmethode:
Thread-Klasse erben
Runnable-Klasse implementieren
---------------- - ------------------------------------------------- - -----------------
1. Erben Sie die Thread-Klasse
Nachdem Sie die Thread-Klasse geerbt haben, müssen Sie den öffentlichen Void-Lauf überschreiben( ) der übergeordneten Klassenmethode als Hauptmethode des Threads.
Die Ausführung aller Threads muss gleichzeitig erfolgen, das heißt: Mehrere Threads werden abwechselnd im gleichen Zeitraum ausgeführt. Um diesen Zweck zu erreichen, dürfen Sie die run()-Methode nicht direkt aufrufen. Stattdessen sollten Sie die start()-Methode der Thread-Klasse aufrufen, um mehrere Threads zu starten.
Vergleich zwischen dem Aufruf der start()-Methode und dem Aufruf der run()-Methode:
public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { for(int i=0; i<10; i++) { System.out.println(name + "打印:" + i); } } public static void main(String[] args) { MyThread mt1 = new MyThread("线程A"); MyThread mt2 = new MyThread("线程B"); MyThread mt3 = new MyThread("线程C"); mt1.start(); mt2.start(); mt3.start(); } }
Ausführungsergebnisse: (Drei Threads werden gleichzeitig und abwechselnd ausgeführt, es gibt keine feste Ausführungsreihenfolge)
public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { for(int i=0; i<5; i++) { System.out.println(name + "打印:" + i); } } public static void main(String[] args) { MyThread mt1 = new MyThread("线程A"); MyThread mt2 = new MyThread("线程B"); MyThread mt3 = new MyThread("线程C"); mt1.run(); mt2.run(); mt3.run(); } }
Ausführungsergebnisse: (Drei Programme werden nacheinander ausgeführt)
2. Der start() Methode implementiert Multithreading Das Prinzip von
Öffnen Sie den start()-Methodenteil des Quellcodes der Thread-Klasse:
public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.add(this); boolean started = false; try { start0(); started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { } } } private native void start0();
Das native Schlüsselwort bezieht sich auf die Methode zum Aufrufen des Betriebssystems. und die Methode start0() ist die Methode des Betriebssystems.
Da der Start von Threads die Zuweisung von Ressourcen im Betriebssystem beinhaltet, sollte der Start bestimmter Threads je nach Betriebssystem unterschiedlich implementiert werden. Die JVM implementiert unterschiedliche Implementierungen entsprechend der in verschiedenen Betriebssystemen definierten start0()-Methode. Auf diese Weise ändert sich der Name der start0()-Methode auf Multithread-Ebene nicht und verschiedene Betriebssysteme haben unterschiedliche Implementierungen.
Schematische Darstellung
Fazit: Nur die start()-Methode der Thread-Klasse kann Betriebssystemressourcen zuweisen, daher ist die Möglichkeit, Multithreads zu starten immer Thread Die start()-Methode der Klasse.