Mehrere Möglichkeiten, Multithreading in Java zu implementieren
Es gibt drei Möglichkeiten, Java-Multithreading zu verwenden: die Thread-Klasse erben, die Runnable-Schnittstelle implementieren und Callable und Future zum Erstellen von Threads verwenden.
1. Die Thread-Klasse erben
Die Implementierung ist sehr einfach. Sie müssen lediglich eine Klasse erstellen, um die Thread-Klasse zu erben und zu überschreiben Die Ausführungsmethode kann durch Aufrufen der Startmethode des Instanzobjekts dieser Klasse in der Hauptmethode erreicht werden. Code:
public class MyThread extends Thread { @Override public void run(){ super.run(); System.out.println("执行子线程..."); } }
Testfall:
public class Test { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); System.out.println("主线程..."); } }
Laufergebnis:
Natürlich stellen die Ergebnisse hier nicht die Ausführungsreihenfolge von dar Die Threads werden gleichzeitig ausgeführt. Wenn sie mehrmals ausgeführt werden, kann die Druckreihenfolge unterschiedlich sein. Während der Multithread-Ausführung führt die CPU Threads auf unsichere Weise aus, sodass die Ausführungsergebnisse nichts mit der Ausführungsreihenfolge des Codes oder der Aufrufreihenfolge zu tun haben und die Ausführungsergebnisse auch unterschiedlich sein können.
Empfohlene kostenlose Video-Tutorials: Java-Lernvideo
Ein weiterer zu beachtender Punkt ist, dass die Startmethode von myThread in der Hauptmethode und nicht in run() aufgerufen werden sollte. Verfahren. Der Aufruf der start()-Methode teilt der CPU mit, dass dieser Thread zur Ausführung bereit ist, und das System führt seine run()-Methode aus, wenn es Zeit hat.
Beim direkten Aufruf der run()-Methode wird diese nicht asynchron, sondern synchron nacheinander ausgeführt, wie beim Aufrufen einer Funktion, wodurch die Bedeutung von Multithreading verloren geht.
2. Implementieren Sie die Runnable-Schnittstelle
Die Implementierung dieser Methode ist ebenfalls sehr einfach, nämlich die zu implementierende geerbte Thread-Klasse zu ändern die Runnable-Schnittstelle. Der Code lautet wie folgt:
public class MyRunnable implements Runnable { @Override public void run() { System.out.println("执行子线程..."); } }
Testfall:
public class Test { public static void main(String[] args) { Runnable runnable = new MyRunnable(); Thread thread = new Thread(runnable); thread.start(); System.out.println("主线程运行结束!"); } }
Laufergebnis:
Das Laufergebnis ist nichts zu sagen, Sie kann es hier im Wesentlichen sehen. Wenn es darum geht, tatsächlich einen neuen Thread zu erstellen, wird er immer noch über Thread erstellt:
Thread thread = new Thread(runnable);
Die Rolle der Thread-Klasse in diesem Schritt besteht darin, die run()-Methode in einen Thread zu packen Ausführungskörper, und verwenden Sie dann weiterhin Start, um dem System mitzuteilen, dass der Thread zur geplanten Implementierung bereit ist.
3. Verwenden Sie Callable und Future, um Threads zu erstellen
Die beiden oben genannten Methoden haben diese beiden Probleme:
1. Der Rückgabewert des untergeordneten Threads kann nicht abgerufen werden.
2. Die Ausführungsmethode kann keine Ausnahme auslösen.
Um diese beiden Probleme zu lösen, müssen wir die Callable-Schnittstelle verwenden. Apropos Schnittstellen: Die obige Instanz der Runnable-Schnittstellenimplementierungsklasse wird als Parameter des Konstruktors der Thread-Klasse übergeben und dann wird der Inhalt in der Ausführungsmethode durch den Start von Thread ausgeführt. Callable ist jedoch keine Unterschnittstelle von Runnable, sondern eine brandneue Schnittstelle. Ihre Instanz kann nicht direkt an das Thread-Konstrukt übergeben werden, daher ist eine andere Schnittstelle erforderlich, um sie zu konvertieren.
Java5 stellt die Future-Schnittstelle zur Darstellung des Rückgabewerts der call()-Methode in der Callable-Schnittstelle bereit und stellt eine Implementierungsklasse FutureTask für die Future-Schnittstelle bereit. Die Vererbungsbeziehung der Implementierungsklasse ist wie in der Abbildung dargestellt Abbildung:
Wie Sie sehen, implementiert diese Implementierungsklasse nicht nur die Future-Schnittstelle, sondern auch die Runnable-Schnittstelle, sodass sie direkt an den Thread-Konstruktor übergeben werden kann.
Der Konstruktor von FutureTask lautet wie folgt:
Es gibt also tatsächlich einen Konvertierungsprozess mehr als bei der vorherigen Methode, und letztendlich wird durch den Thread-Start ein neuer Thread erstellt. Mit dieser Idee ist der Code leicht zu verstehen:
import java.util.concurrent.Callable; public class MyCallable implements Callable { int i = 0; @Override public Object call() throws Exception { System.out.println(Thread.currentThread().getName()+" i的值:"+ i); return i++; //call方法可以有返回值 } }
Test:
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Test { public static void main(String[] args) { Callable callable = new MyCallable(); for (int i = 0; i < 10; i++) { FutureTask task = new FutureTask(callable); new Thread(task,"子线程"+ i).start(); try { //获取子线程的返回值 System.out.println("子线程返回值:"+task.get() + "\n"); } catch (Exception e) { e.printStackTrace(); } } } }
Ausführungsergebnis (Teil):
Verwandt empfohlen Artikel-Tutorials: Java-Einstiegsprogramm
Das obige ist der detaillierte Inhalt vonMehrere Möglichkeiten, Multithreading in Java zu implementieren. 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 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

Spring Boot vereinfacht die Schaffung robuster, skalierbarer und produktionsbereiteter Java-Anwendungen, wodurch die Java-Entwicklung revolutioniert wird. Der Ansatz "Übereinkommen über Konfiguration", der dem Feder -Ökosystem inhärent ist, minimiert das manuelle Setup, Allo
