suchen
HeimJavaJavaBaseMehrere Möglichkeiten, Multithreading in Java zu implementieren

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:

Mehrere Möglichkeiten, Multithreading in Java zu implementieren

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:

Mehrere Möglichkeiten, Multithreading in Java zu implementieren

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:

Mehrere Möglichkeiten, Multithreading in Java zu implementieren

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):

Mehrere Möglichkeiten, Multithreading in Java zu implementieren

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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was sind verschiedene Algorithmen für die Müllsammlung in Java (seriell, parallel, CMS, G1, ZGC)?Was sind verschiedene Algorithmen für die Müllsammlung in Java (seriell, parallel, CMS, G1, ZGC)?Mar 14, 2025 pm 05:06 PM

In dem Artikel werden verschiedene Algorithmen für Java -Müllsammlungen (seriell, parallel, CMS, G1, ZGC), deren Leistungsauswirkungen und Eignung für Anwendungen mit großen Haufen erörtert.

Was ist die Java Virtual Machine (JVM) und wie funktioniert sie intern?Was ist die Java Virtual Machine (JVM) und wie funktioniert sie intern?Mar 14, 2025 pm 05:05 PM

In dem Artikel werden die Java Virtual Machine (JVM) erörtert, in der die Rolle bei der Ausführung von Java -Programmen auf verschiedenen Plattformen aufgeführt ist. Es erläutert die internen Prozesse, Schlüsselkomponenten, das Speichermanagement, die Müllsammlung und das Leistungsoptimizatio des JVM

Wie benutze ich Javas Nashorn -Engine zum Scripting mit JavaScript?Wie benutze ich Javas Nashorn -Engine zum Scripting mit JavaScript?Mar 14, 2025 pm 05:00 PM

Javas Nashorn Engine ermöglicht JavaScript Scripting in Java -Apps. Zu den wichtigsten Schritten gehören das Einrichten von Nashorn, das Verwalten von Skripten und die Optimierung der Leistung. Hauptfragen beinhalten Sicherheit, Speicherverwaltung und zukünftige Kompatibilität aufgrund von Nashorns Deprecus

Wie benutze ich Javas Versuchserklärung für das automatische Ressourcenmanagement?Wie benutze ich Javas Versuchserklärung für das automatische Ressourcenmanagement?Mar 14, 2025 pm 04:59 PM

Javas Try-with-Ressources vereinfacht das Ressourcenmanagement, indem Ressourcen wie Dateiströme oder Datenbankverbindungen automatisch geschlossen werden und die Code-Lesbarkeit und -wartbarkeit verbessert werden.

Wie benutze ich Javas Enums, um feste Wertesätze darzustellen?Wie benutze ich Javas Enums, um feste Wertesätze darzustellen?Mar 14, 2025 pm 04:57 PM

Java Enum repräsentieren feste Wertesätze und bieten durch benutzerdefinierte Methoden und Konstruktoren Typensicherheit, Lesbarkeit und zusätzliche Funktionalität. Sie verbessern die Codeorganisation und können in Switch -Anweisungen zur effizienten Wertschreibung verwendet werden.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung