Heim >Java >javaLernprogramm >Warum ist „Thread.start()' für echtes Multithreading in Java unerlässlich?

Warum ist „Thread.start()' für echtes Multithreading in Java unerlässlich?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-15 09:15:17359Durchsuche

Why is `Thread.start()` essential for true multithreading in Java?

Den Unterschied zwischen Thread.start() und Thread.run() verstehen

Bei der Arbeit mit Multithreading in Java stoßen Programmierer auf zwei Schlüssel Methoden: Thread.start() und Thread.run(). Obwohl ihre Namen auf eine ähnliche Funktionalität hinweisen, dienen sie deutlich unterschiedlichen Zwecken.

Was bewirken diese Methoden?

Thread.start():

  • Initialisiert einen neuen Thread und führt die run()-Methode in einem separaten Thread aus Ausführung.
  • Weist Systemressourcen zu und richtet die Ausführungsumgebung des Threads ein.
  • Die Steuerung wird an die JVM übertragen, um die Thread-Planung und -Ausführung zu verwalten.

Thread.run():

  • Ruft die run()-Methode direkt innerhalb des aktuellen Threads auf Thread.
  • Erstellt keinen neuen Thread; Stattdessen wird der Code im aktuellen Ausführungsthread ausgeführt.
  • Für die Thread-Verwaltung werden keine Systemressourcen zugewiesen.

Warum können wir nicht einfach Thread.run aufrufen? ()?

Wenn Thread.run() auch die run()-Methode ausführt, warum können wir diese dann nicht einfach anstelle von Thread.start() aufrufen? Der Grund liegt in der Isolation und unabhängigen Ausführung, die Multithreading bietet.

Der Aufruf von Thread.run() führt den Code im aktuellen Thread aus, nicht in einem separaten Thread. Dies bedeutet, dass jeglicher Code in der run()-Methode weiterhin mit Ressourcen im aktuellen Thread interagiert und diese beeinflusst. Dies ist nicht der beabsichtigte Zweck von Multithreading, das die gleichzeitige Ausführung von Aufgaben ermöglicht.

Beispiel zur Veranschaulichung des Unterschieds:

Bedenken Sie Folgendes Code:

public class ThreadExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> System.out.println("Thread 1"));
        Thread t2 = new Thread(() -> System.out.println("Thread 2"));

        // Here, we call Thread.start() and Thread.run():
        t1.start();  // Starts Thread 1 in a separate thread
        t2.run();    // Executes Thread 2 in the current thread

        System.out.println("Main Thread");
    }
}

Ausgabe:

Thread 1
Main Thread

Der Aufruf von Thread.start() auf t1 erstellt einen neuen Thread und führt die run()-Methode in diesem Thread aus , sodass „Thread 1“ gedruckt werden kann. Andererseits führt der Aufruf von Thread.run() auf t2 die run()-Methode im aktuellen (d. h. Haupt-)Thread aus und umgeht die Erstellung eines neuen Threads. Dies führt dazu, dass „Thread 2“ nicht gedruckt wird, da er nie in einem separaten Thread ausgeführt wird.

Das obige ist der detaillierte Inhalt vonWarum ist „Thread.start()' für echtes Multithreading in Java unerlässlich?. 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