Einführung in 3 Methoden zum Erstellen von Threads in Java (Code)
Dieser Artikel bietet Ihnen eine Einführung (Code) in die drei Methoden zum Erstellen von Threads in Java. Ich hoffe, dass er Ihnen als Referenz dienen wird.
Wenn Sie einen Thread in Java erstellen möchten, gibt es im Allgemeinen drei Methoden:
Erben Sie die Thread-Klasse
Implementierung Runnable-Schnittstelle;
Verwenden Sie Callable und Future, um Threads zu erstellen.
1. Erben Sie die Thread-Klasse
Wenn Sie die Thread-Klasse erben, müssen Sie die Ausführungsmethode überschreiben und die erforderlichen Aufgaben definieren in der run-Methode durchgeführt werden.
class MyThread extends Thread{ private static int num = 0; public MyThread(){ num++; } @Override public void run() { System.out.println("主动创建的第"+num+"个线程"); } }
Nachdem Sie Ihre eigene Thread-Klasse erstellt haben, können Sie ein Thread-Objekt erstellen und dann den Thread über die start()-Methode starten. Beachten Sie, dass die run()-Methode nicht zum Starten des Threads aufgerufen wird. Wenn die run-Methode aufgerufen wird, entspricht dies der Ausführung der run-Methode im Hauptthread Es gibt keinen Unterschied zu gewöhnlichen Methodenaufrufen. Zu diesem Zeitpunkt wird kein neuer Thread erstellt, um die definierten Aufgaben auszuführen.
public class Test { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } } class MyThread extends Thread{ private static int num = 0; public MyThread(){ num++; } @Override public void run() { System.out.println("主动创建的第"+num+"个线程"); } }
Im obigen Code wird durch Aufrufen der start()-Methode ein neuer Thread erstellt. Um den Unterschied zwischen dem Methodenaufruf start() und dem Methodenaufruf run() zu unterscheiden, schauen Sie sich bitte das folgende Beispiel an:
public class Test { public static void main(String[] args) { System.out.println("主线程ID:"+Thread.currentThread().getId()); MyThread thread1 = new MyThread("thread1"); thread1.start(); MyThread thread2 = new MyThread("thread2"); thread2.run(); } } class MyThread extends Thread{ private String name; public MyThread(String name){ this.name = name; } @Override public void run() { System.out.println("name:"+name+" 子线程ID:"+Thread.currentThread().getId()); } }
Laufergebnis:
Aus den Ausgabeergebnissen können folgende Schlussfolgerungen gezogen werden:
1) Die Thread-IDs von Thread1 und Thread2 sind unterschiedlich, und Thread2 und die Haupt-Thread-ID sind gleich, was darauf hinweist, dass die Ausführungsmethode aufgerufen wird erstellt keinen neuen Thread, sondern im Hauptthread. Das direkte Ausführen der Ausführungsmethode unterscheidet sich nicht von gewöhnlichen Methodenaufrufen
2) Obwohl die Startmethode von Thread1 vor der Ausführungsmethode von Thread2 aufgerufen wird, ist die Zuerst werden Informationen zum Aufruf der Ausführungsmethode von Thread2 ausgegeben, was darauf hinweist, dass der Prozess der Erstellung eines neuen Threads die nachfolgende Ausführung des Hauptthreads nicht blockiert.
2. Implementieren Sie die Runnable-Schnittstelle
Zusätzlich zum Erben der Thread-Klasse beim Erstellen eines Threads in Java können Sie auch ähnliche Funktionen implementieren, indem Sie die Runnable-Schnittstelle implementieren. Die Implementierung der Runnable-Schnittstelle muss deren Ausführungsmethode überschreiben.
Das Folgende ist ein Beispiel:
public class Test { public static void main(String[] args) { System.out.println("主线程ID:"+Thread.currentThread().getId()); MyRunnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); } } class MyRunnable implements Runnable{ public MyRunnable() { } @Override public void run() { System.out.println("子线程ID:"+Thread.currentThread().getId()); } }
Die chinesische Bedeutung von Runnable ist „Aufgabe“. Wie der Name schon sagt, definieren wir durch die Implementierung der Runnable-Schnittstelle eine Unteraufgabe und übergeben die Unteraufgabe zum Thread zur Ausführung. Beachten Sie, dass diese Methode Runnable als Parameter der Thread-Klasse verwenden und dann die Startmethode von Thread verwenden muss, um einen neuen Thread zum Ausführen der Unteraufgabe zu erstellen. Wenn Sie die run-Methode von Runnable aufrufen, wird kein neuer Thread erstellt. Dieser normale Methodenaufruf macht keinen Unterschied.
Wenn Sie sich den Implementierungsquellcode der Thread-Klasse ansehen, werden Sie feststellen, dass die Thread-Klasse die Runnable-Schnittstelle implementiert.
In Java können diese beiden Methoden verwendet werden, um Threads zur Ausführung von Unteraufgaben zu erstellen. Welche Methode Sie wählen, hängt von Ihren eigenen Anforderungen ab. Das direkte Erben der Thread-Klasse scheint einfacher zu sein als das Implementieren der Runnable-Schnittstelle. Da Java jedoch nur eine einzelne Vererbung zulässt, kann eine benutzerdefinierte Klasse, wenn sie andere Klassen erben muss, nur die Implementierung der Runnable-Schnittstelle auswählen.
3. Verwenden Sie Callable und Future, um Threads zu erstellen
Im Gegensatz zur Runnable-Schnittstelle bietet die Callable-Schnittstelle eine call()-Methode als Thread-Ausführungskörper, den call( )-Methode Es ist leistungsfähiger als die run()-Methode.
Die Schritte zum Erstellen und Starten eines Threads mit einem Rückgabewert sind wie folgt:
Erstellen Sie eine Implementierungsklasse der Callable-Schnittstelle, implementieren Sie die Methode call(), und erstellen Sie dann die Implementierungsklasse Instanz (ab Java8 können Sie Lambda-Ausdrücke direkt verwenden, um aufrufbare Objekte zu erstellen).
Verwenden Sie die FutureTask-Klasse, um das Callable-Objekt zu umschließen, die den Rückgabewert der call()-Methode des Callable-Objekts kapselt
Verwenden das FutureTask-Objekt Erstellen und starten Sie einen Thread als Ziel des Thread-Objekts (da FutureTask die Runnable-Schnittstelle implementiert)
Rufen Sie die get()-Methode des FutureTask-Objekts auf, um den Rückgabewert zu erhalten nachdem die Ausführung des untergeordneten Threads abgeschlossen ist
Das Folgende ist ein Beispiel:
public class Main { public static void main(String[] args){ MyThread3 th=new MyThread3(); //使用Lambda表达式创建Callable对象 //使用FutureTask类来包装Callable对象 FutureTask<Integer> future=new FutureTask<Integer>( (Callable<Integer>)()->{ return 5; } ); new Thread(task,"有返回值的线程").start();//实质上还是以Callable对象来创建并启动线程 try{ System.out.println("子线程的返回值:"+future.get());//get()方法会阻塞,直到子线程执行结束才返回 }catch(Exception e){ ex.printStackTrace(); } } }
Vergleich von drei Möglichkeiten zum Erstellen von Threads:
Implementieren von Runnable und Implementieren von Callable-Schnittstellen Die Methoden sind grundsätzlich gleich, mit der Ausnahme, dass letztere beim Ausführen der Methode call() einen Rückgabewert haben und letztere beim Ausführen der Methode run() keinen Rückgabewert haben Daher können diese beiden Methoden in eine Klasse eingeteilt werden. Diese Methode ist dieselbe wie die Methode, die die Thread-Klasse erbt. Die Unterschiede sind wie folgt:
Threads Implementieren Sie nur Runnable oder die Callable-Schnittstelle und können Sie auch andere Klassen erben.
Auf diese Weise können mehrere Threads ein Zielobjekt gemeinsam nutzen, was sehr gut für Situationen geeignet ist, in denen mehrere Threads dieselbe Ressource verarbeiten.
Aber die Programmierung ist etwas kompliziert. Wenn Sie auf den aktuellen Thread zugreifen müssen, müssen Sie die Methode Thread.currentThread() aufrufen.
Eine Thread-Klasse, die die Thread-Klasse erbt, kann keine anderen übergeordneten Klassen erben (Java-Einzelvererbungsentscheidung).
PS: Es wird generell empfohlen, Multithreads durch die Implementierung von Schnittstellen zu erstellen
Das obige ist der detaillierte Inhalt vonEinführung in 3 Methoden zum Erstellen von Threads in Java (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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 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.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4
