Inhaltsverzeichnis
Was ist ein Thread:
Multi-Threading (parallel und gleichzeitig)
Multithreading (das Prinzip der Ausführung von Java-Programmen)
auf. Ist es ein Single-Thread, um den JVM zu starten?
So erstellen Sie Multithreads in Java
(1) Erben Sie die Thread-Klasse und rufen Sie die Startmethode auf
(2) Implementieren Sie die ausführbare Schnittstelle und schreiben Sie die run-Methode neu
die Callable-Schnittstelle implementieren
Thread erben, um den Unterschied zwischen Runnable und Callable zu erkennen
Aus der Quellcode-Implementierung
Thread erben
Implement Runnable
implementiert die Callable-Schnittstelle
In Bezug auf Verwendung und Erweiterung
Runnable implementieren
zur Implementierung aufgerufen werden Aufrufbar
Heim Java javaLernprogramm Wie erstelle ich Multithreading in Java? (ausführlich)

Wie erstelle ich Multithreading in Java? (ausführlich)

Sep 25, 2018 pm 03:32 PM
java多线程

Der Inhalt dieses Artikels befasst sich mit der Frage, wie man Multithreading in Java erstellt. (ausführlich), es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen.

Was ist ein Thread:

Ein Thread ist eine Einheit im Prozess und die Grundeinheit, die vom System unabhängig geplant und versendet wird keine eigenen Systemressourcen, sondern nur eine unverzichtbare Ressource während des Betriebs, aber es kann alle Ressourcen, die dem Prozess gehören, mit anderen Threads teilen, die zum selben Prozess gehören

Oberflächlich betrachtet ist es multi- Threading, aber tatsächlich wechselt sich die CPU ab, um schnell auszuführen

Multi-Threading (parallel und gleichzeitig)

  1. Parallel: Zwei Aufgaben werden gleichzeitig ausgeführt, Das heißt, während Aufgabe A ausgeführt wird, wird auch Aufgabe B ausgeführt (erfordert mehrere Kerne)

  2. Gleichzeitigkeit: Beide Aufgaben werden zur Ausführung aufgefordert, und der Prozessor kann daher nur eine Aufgabe annehmen Die beiden Aufgaben sollen nacheinander ausgeführt werden. Da das Zeitintervall sehr kurz ist, haben die Leute das Gefühl, dass beide Aufgaben ausgeführt werden

Multithreading (das Prinzip der Ausführung von Java-Programmen)

Der Java-Befehl wird ausgeführt Starten Sie die JVM, was dem Starten einer Anwendung (eines Prozesses) entspricht. Der Prozess startet automatisch den „Hauptthread“. Der Hauptthread ruft die Hauptmethode

auf. Ist es ein Single-Thread, um den JVM zu starten?

Nein, es ist Multi-Threaded. Zumindest werden der Garbage-Collection-Thread und der Haupt-Thread gestartet.

Dies kann durch den folgenden Code überprüft werden. Der Haupt-Thread und der Garbage-Collection-Thread konkurrieren um Ressourcen.

public class TestThread {

    public static void main(String[] args) {
        //4.创建Thread的子类对象
        MyThread myThread = new MyThread();

        //5.启动线程,注意这里使用的是start而不是run方法
        myThread.start();

        for (int i = 0; i < 10000; i ++) {
            System.out.println("This is main thread");
        }
    }


}

//1.继承Thread
class MyThread extends  Thread{

    //2.重写run方法
    @Override
    public void run() {
        super.run();
        //3.线程方法中要执行的代码,可以根据自己的需求填写
        for(int i = 0 ; i < 10000 ; i ++ ) {
            System.out.println("This is MyThread thread ");
        }
    }
}
Nach dem Login kopieren

So erstellen Sie Multithreads in Java

(1) Erben Sie die Thread-Klasse und rufen Sie die Startmethode auf

Thread implementiert die Runnable-Schnittstelle
Um Multithreading zu implementieren, müssen Sie muss eine Unterklasse von Thread werden und die Ausführungsmethode überschreiben. Beachten Sie, dass beim Starten eines Threads nicht die Ausführungsmethode, sondern die Startmethode aufgerufen wird. Wenn die run-Methode aufgerufen wird, entspricht sie einer normalen Methode und öffnet den Thread nicht

public class Thread implements Runnable
Nach dem Login kopieren
public class TestThread {

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        //注意这里使用的是start而不是run方法
        myThread.start();

        for (int i = 0; i < 10000; i ++) {
            System.out.println("This is main thread");
        }
    }
}
class MyThread extends  Thread{
    @Override
    public void run() {
        super.run();

        for(int i = 0 ; i < 10000 ; i ++ ) {
            System.out.println("This is MyThread thread ");
        }
    }
}
Nach dem Login kopieren

(2) Implementieren Sie die ausführbare Schnittstelle und schreiben Sie die run-Methode neu

Es gibt nur eine Methode in Runnable, run(), Die Thread-Startmethode existiert in Thread,
Wenn wir dann endlich den Thread starten, müssen wir den Thread über das Unterklassenobjekt von Thread starten

public class TestRunnable {

    public static void main(String[] args) {
        //4.创建Thread的子类对象
        Runnable myRunnable = new MyRunnable();

        //5.启动线程,创建Thread并把runnable的子类作为构造参数
        new Thread(myRunnable).start();

        for (int i = 0; i < 10000; i ++) {
            System.out.println("This is main thread");
        }
    }

}
//1.实现runnable接口
class MyRunnable implements Runnable {

    //2.重写run方法
    @Override
    public void run() {
        //3.线程方法中要执行的代码,可以根据自己的需求填写
        for(int i = 0 ; i < 10000 ; i ++ ) {
            System.out.println("This is MyRunnable thread ");
        }
    }
}
Nach dem Login kopieren

die Callable-Schnittstelle implementieren

Um Threads zu implementieren, können Sie zusätzlich zum Erben von Thread und Runnable auch die Callable-Schnittstelle implementieren. Die Callable-Schnittstelle bietet eine call()-Methode, die als Thread-Ausführungskörper verwendet werden kann und dieselbe Funktion wie run() hat. Die Methode call() hat jedoch mehr Rückgabewerte als die Methode run(), und die Methode call() kann die ausgelöste Ausnahme deklarieren. Wie starten wir also den Callable-Thread? Da die Callable-Schnittstelle keine Unterschnittstelle der Runnable-Schnittstelle ist, kann das Callable-Objekt nicht als Konstruktionsparameter von Thread verwendet werden. Java bietet eine weitere Schnittstelle, die RunnableFuture-Schnittstelle, die Runnable implementiert, Future

  1. implementiert die Callable-Schnittstelle

  2. Schreiben Sie die call-Methode, die der run-Methode im Thread entspricht. Der Unterschied besteht darin, dass die Aufrufmethode Rückgabewerte

  3. ermöglicht, um das Callable-Implementierungsklassenobjekt als Konstruktionsparameter an FutureTask zu übergeben und so ein FutureTask-Objekt zu erstellen.

  4. Übergeben Sie das FutureTask-Objekt als Konstruktionsparameter an Thread und starten Sie den Thread

public class CallableDemo {

    public static void main(String[] args) {
        //3.把Callable实现类对象作为构造参数传入FutureTask创建FutureTask对象。
        FutureTask<UUID> futureTask = new FutureTask<UUID>(new MyCallable());
        //4.把FutureTask对象作为构造参数传入Thread,并开启线程
        new Thread(futureTask).start();
        try {
            System.out.println(futureTask.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

//1. 实现**Callable**接口
class MyCallable implements Callable<UUID> {

    //2.重写**call**方法,相当于thread中的run方法。不同的是call方法允许有返回值
    @Override
    public UUID call() throws Exception {
        //生成随机数
        return UUID.randomUUID();
    }
}
Nach dem Login kopieren

Thread erben, um den Unterschied zwischen Runnable und Callable zu erkennen

Aus der Quellcode-Implementierung

Thread erben

Die Unterklasse schreibt die run()-Methode in Thread neu und ruft die start()-Methode auf. Der JVM ruft automatisch den Lauf der Unterklasse auf ()

Implement Runnable

new Thread(myRunnable) Geben Sie die Referenz von runnable in den Konstruktor von Thread ein und übergeben Sie sie dann an das Mitgliedsvariablenziel von Thread. In der Thread run()-Methode wird beurteilt, dass die Ausführungsmethode der Unterklasse aufgerufen wird, wenn das Ziel nicht leer ist.

    public void run() {
    if (this.target != null) {
        this.target.run();
    }
Nach dem Login kopieren

implementiert die Callable-Schnittstelle

implementiert die Callable-Schnittstelle und schreibt neu die Call()-Methode und kann Thread-Rückgabewerte bereitstellen und auch Ausnahmen auslösen. Schließlich wird es über die Implementierungsklasse FutureTask der Runnable-Subschnittstelle RunnableFuture an das Mitgliedsvariablenziel von Thread übergeben.

In Bezug auf Verwendung und Erweiterung

Thread erben

  1. Vorteile: Rufen Sie die start()-Methode direkt im Thread auf, sehr einfach

  2. Nachteile: Java unterstützt nur die Einzelvererbung. Wenn eine Unterklasse Threads erbt, kann sie keine anderen Klassen erben

Runnable implementieren

  1. Vorteile: Java kann mehrere implementieren

  2. Nachteile: Das Schreiben des Codes ist kompliziert und start() kann nicht direkt

zur Implementierung aufgerufen werden Aufrufbar

  1. Vorteile: Java kann auf verschiedene Arten implementiert werden, kann Ausnahmen auslösen und Rückgabewerte haben

  2. Nachteile: Das Schreiben von Code ist kompliziert

Das obige ist der detaillierte Inhalt vonWie erstelle ich Multithreading in Java? (ausführlich). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte Erläuterung der Verwendungsszenarien und Funktionen des flüchtigen Schlüsselworts in Java Detaillierte Erläuterung der Verwendungsszenarien und Funktionen des flüchtigen Schlüsselworts in Java Jan 30, 2024 am 10:01 AM

Detaillierte Erläuterung der Rolle und Anwendungsszenarien des Schlüsselworts volatile in Java 1. Die Rolle des Schlüsselworts volatile In Java wird das Schlüsselwort volatile verwendet, um eine Variable zu identifizieren, die zwischen mehreren Threads sichtbar ist, dh um die Sichtbarkeit sicherzustellen. Insbesondere wenn eine Variable als flüchtig deklariert wird, sind alle Änderungen an der Variablen sofort anderen Threads bekannt. 2. Anwendungsszenarien des flüchtigen Schlüsselworts Das flüchtige Schlüsselwort Statusflag eignet sich für einige Statusflag-Szenarien, z

Java-Entwicklungsoptimierungsmethode für die Multithread-Beschleunigungsleistung beim Lesen von Dateien Java-Entwicklungsoptimierungsmethode für die Multithread-Beschleunigungsleistung beim Lesen von Dateien Jun 30, 2023 pm 10:54 PM

In der Java-Entwicklung ist das Lesen von Dateien ein sehr häufiger und wichtiger Vorgang. Wenn Ihr Unternehmen wächst, wachsen auch die Größe und die Anzahl der Dateien. Um die Geschwindigkeit des Dateilesens zu erhöhen, können wir Multithreading verwenden, um Dateien parallel zu lesen. In diesem Artikel wird erläutert, wie Sie die Multithread-Beschleunigungsleistung beim Lesen von Dateien in der Java-Entwicklung optimieren können. Bevor wir die Datei lesen, müssen wir zunächst die Größe und Menge der Datei bestimmen. Abhängig von der Größe und Anzahl der Dateien können wir die Anzahl der Threads angemessen festlegen. Eine übermäßige Anzahl von Threads kann zu einer Verschwendung von Ressourcen führen.

Ausnahmebehandlung in einer Java-Multithread-Umgebung Ausnahmebehandlung in einer Java-Multithread-Umgebung May 01, 2024 pm 06:45 PM

Wichtige Punkte der Ausnahmebehandlung in einer Multithread-Umgebung: Ausnahmen abfangen: Jeder Thread verwendet einen Try-Catch-Block, um Ausnahmen abzufangen. Ausnahmen behandeln: Fehlerinformationen drucken oder Fehlerbehandlungslogik im Catch-Block ausführen. Beenden Sie den Thread: Wenn eine Wiederherstellung nicht möglich ist, rufen Sie Thread.stop() auf, um den Thread zu beenden. UncaughtExceptionHandler: Um nicht abgefangene Ausnahmen zu verarbeiten, müssen Sie diese Schnittstelle implementieren und sie dem Thread zuweisen. Praktischer Fall: Ausnahmebehandlung im Thread-Pool, Verwendung von UncaughtExceptionHandler zur Behandlung nicht abgefangener Ausnahmen.

Entdecken Sie die Funktionsprinzipien und Eigenschaften von Java-Multithreading Entdecken Sie die Funktionsprinzipien und Eigenschaften von Java-Multithreading Feb 21, 2024 pm 03:39 PM

Entdecken Sie die Funktionsprinzipien und Eigenschaften von Java-Multithreading. Einführung: In modernen Computersystemen ist Multithreading zu einer gängigen Methode der gleichzeitigen Verarbeitung geworden. Als leistungsstarke Programmiersprache bietet Java einen umfassenden Multithreading-Mechanismus, der es Programmierern ermöglicht, den Multi-Core-Prozessor des Computers besser zu nutzen und die Effizienz der Programmausführung zu verbessern. In diesem Artikel werden die Funktionsprinzipien und Eigenschaften von Java-Multithreading untersucht und anhand spezifischer Codebeispiele veranschaulicht. 1. Das Grundkonzept des Multithreadings Multithreading bezieht sich auf die gleichzeitige Ausführung mehrerer Threads in einem Programm, wobei jeder Thread unterschiedliche Prozesse verarbeitet

Java-Multithread-Debugging-Technologie enthüllt Java-Multithread-Debugging-Technologie enthüllt Apr 12, 2024 am 08:15 AM

Antworten der Multithread-Debugging-Technologie: 1. Herausforderungen beim Multithread-Code-Debugging: Die Interaktion zwischen Threads führt zu komplexem und schwer nachverfolgbarem Verhalten. 2. Java-Multithread-Debugging-Technologie: Zeilenweises Debuggen von Thread-Dumps (jstack) zum Überwachen von Ein- und Ausgangsereignissen, Thread-Lokalvariablen. 3. Praktischer Fall: Verwenden Sie Thread-Dump, um Deadlocks zu finden, und verwenden Sie Monitorereignisse, um die Ursache des Deadlocks zu ermitteln. 4. Schlussfolgerung: Die von Java bereitgestellte Multi-Thread-Debugging-Technologie kann Probleme im Zusammenhang mit Thread-Sicherheit, Deadlock und Konflikten effektiv lösen.

Leitfaden zur Java-Multithreading-Leistungsoptimierung Leitfaden zur Java-Multithreading-Leistungsoptimierung Apr 11, 2024 am 11:36 AM

Der Java Multithreading Performance Optimization Guide bietet fünf wichtige Optimierungspunkte: Reduzieren Sie den Aufwand für die Thread-Erstellung und -Zerstörung. Vermeiden Sie unangemessene Sperrenkonflikte. Verwenden Sie nicht blockierende Datenstrukturen. Nutzen Sie Happens-Before-Beziehungen. Ziehen Sie sperrenfreie parallele Algorithmen in Betracht

Multithread-Sicherheitsprobleme in Java – Lösungen für java.lang.ThreadDeath Multithread-Sicherheitsprobleme in Java – Lösungen für java.lang.ThreadDeath Jun 25, 2023 am 11:22 AM

Java ist eine in der modernen Softwareentwicklung weit verbreitete Programmiersprache, und ihre Multithread-Programmierfähigkeiten sind auch einer ihrer größten Vorteile. Aufgrund der durch Multithreading verursachten gleichzeitigen Zugriffsprobleme treten in Java jedoch häufig Multithread-Sicherheitsprobleme auf. Unter diesen ist java.lang.ThreadDeath ein typisches Multithread-Sicherheitsproblem. In diesem Artikel werden die Ursachen und Lösungen von java.lang.ThreadDeath vorgestellt. 1. Gründe für java.lang.ThreadDeath

Detaillierte Erläuterung der Java-Multithread-Parallelitätssperre Detaillierte Erläuterung der Java-Multithread-Parallelitätssperre Apr 11, 2024 pm 04:21 PM

Der Java-Parallelitätssperrmechanismus stellt sicher, dass in einer Multithread-Umgebung nur ein Thread auf gemeinsam genutzte Ressourcen zugreift. Zu seinen Typen gehören pessimistisches Sperren (Sperre erwerben und dann darauf zugreifen) und optimistisches Sperren (nach dem Zugriff auf Konflikte prüfen). Java bietet integrierte Parallelitätssperrklassen wie ReentrantLock (Mutex-Sperre), Semaphore (Semaphor) und ReadWriteLock (Lese-/Schreibsperre). Durch die Verwendung dieser Sperren kann ein Thread-sicherer Zugriff auf gemeinsam genutzte Ressourcen gewährleistet werden. So kann beispielsweise sichergestellt werden, dass nur ein Thread seinen Wert aktualisiert, wenn mehrere Threads gleichzeitig auf den Zähler für gemeinsam genutzte Variablen zugreifen.

See all articles