Was ist der Unterschied zwischen Thread start() und Runnable run()

Lesezeit: 4 Minuten

Was ist der Unterschied zwischen Thread start und Runnable run
Ori Popowski

Angenommen, wir haben diese beiden Runnables:

class R1 implements Runnable {
    public void run() { … }
    …
}

class R2 implements Runnable {
    public void run() { … }
    …
}

Was ist dann der Unterschied zwischen:

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();

    r1.run();
    r2.run();
}

Und das:

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();
    Thread t1 = new Thread(r1);
    Thread t2 = new Thread(r2);

    t1.start();
    t2.start();
}

Was ist der Unterschied zwischen Thread start und Runnable run
Bhesh Gurung

Erstes Beispiel: Keine Mehrfach-Threads. Beide werden in einem einzigen (vorhandenen) Thread ausgeführt. Keine Threaderstellung.

R1 r1 = new R1();
R2 r2 = new R2();

r1 und r2 sind nur zwei verschiedene Objekte von Klassen, die die implementieren Runnable Schnittstelle und somit die implementieren run() Methode. Wenn du anrufst r1.run() Sie führen es im aktuellen Thread aus.

Zweites Beispiel: Zwei getrennte Threads.

Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);

t1 und t2 sind Objekte der Klasse Thread. Wenn du anrufst t1.start()es startet einen neuen Thread und ruft die auf run() Methode von r1 intern, um es in diesem neuen Thread auszuführen.

  • Könnte ich bedenken, dass vor dem Aufruf von Thread#start() nichts wirklich relativ zum os-Thread passiert? Es ist nur ein Java-Objekt.

    – JaskeyLam

    6. Dezember 2014 um 9:38 Uhr

  • Laut Dokumentation ist das richtig. Überprüfen Sie den Thread-Objekt-Initialisierungscode, der der Dokumentation entspricht. Auch im Quellcode ist es die start()die eine natvie-Methode aufruft, die dafür sorgen muss, dass die mit dem Betriebssystem-Thread zusammenhängenden Dinge geschehen.

    – Bhesh Gurung

    28. Mai 2015 um 14:44 Uhr

  • Thread-Konstruktor-Dokumentation ist Hier. Thread-Objekt-Initialisierungsquelle ist Hier. start() Methodenquelle ist Hier.

    – Bhesh Gurung

    28. Mai 2015 um 14:47 Uhr


Wenn Sie nur aufrufen run() direkt, es wird im aufrufenden Thread ausgeführt, genau wie jeder andere Methodenaufruf. Thread.start() erforderlich ist, um tatsächlich einen neuen Thread zu erstellen, damit die Runnable’s run Methode wird parallel ausgeführt.

  • In Hotspot JVM gibt es eine direkte Zuordnung zwischen Java-Thread und nativem Thread. Thread.start() Aufruf machen Thread-Zustand bewegen von Neu Zustand zu Lauffähig Zustand. Runnable bedeutet nicht, dass Thread läuft. Sobald der native Thread initialisiert wurde, ruft der native Thread die run() -Methode im Java-Thread, die den Thread-Status ändert Lauffähig zu Laufen. Wenn der Thread beendet wird, werden alle Ressourcen sowohl für den nativen als auch für den Java-Thread freigegeben.

    – Übertausch

    27. September 2017 um 18:09 Uhr


  • @overexchange Wo finde ich das Material über Zustandsänderungen?

    – twlkyao

    1. Februar 2018 um 7:41 Uhr

1646637428 809 Was ist der Unterschied zwischen Thread start und Runnable run
Benutzer207421

Der Unterschied ist das Thread.start() startet einen Thread, der die aufruft run() Methode, während Runnable.run() ruft einfach an run() Methode im aktuellen Thread.

1646637429 661 Was ist der Unterschied zwischen Thread start und Runnable run
Jaimin Patel

Der Unterschied besteht darin, dass bei Programmaufrufen start() Methode, a Neu Thread wird erstellt und Code drin run() wird im neuen Thread ausgeführt: while if you call run() Methode direkt, es wird kein neuer Thread erstellt und Code drin run() wird direkt im aktuellen Thread ausgeführt.

Ein weiterer Unterschied zw start() und run() im Java-Thread steht, dass Sie nicht anrufen können start() zweimal. Einmal angefangen, zweites start() Anruf wird werfen IllegalStateException in Java, während Sie anrufen können run() Methode mehrmals, da es nur eine gewöhnliche Methode ist.

1646637430 449 Was ist der Unterschied zwischen Thread start und Runnable run
Aditya

Tatsächlich Thread.start() erstellt einen neuen Thread und hat ein eigenes Ausführungsszenario.

Thread.start() ruft die run() Methode asynchron, die den Status des neuen Threads in Runnable ändert.

Aber Thread.run() erstellt keinen neuen Thread. Stattdessen wird die run-Methode im aktuell ausgeführten Thread synchron ausgeführt.

Wenn Sie verwenden Thread.run() dann nutzen Sie die Multi-Threading-Funktionen überhaupt nicht.

1646637431 989 Was ist der Unterschied zwischen Thread start und Runnable run
Ravindra Babu

aufrufen run() wird wie jeder andere Methodenaufruf im aufrufenden Thread ausgeführt. wohingegen Thread.start() erstellt einen neuen Thread. aufrufen run() ist ein Programmfehler.

1646637432 629 Was ist der Unterschied zwischen Thread start und Runnable run
Imabdullah

Wenn Sie tun run() In der Hauptmethode ruft der Thread der Hauptmethode die auf run -Methode anstelle des Threads, den Sie ausführen müssen.

Die start() Methode erstellt einen neuen Thread und für die die run() Methode muss gemacht werden

  • Die ‘Hauptmethode’ hat damit nichts zu tun.

    – Benutzer207421

    28. Oktober 2013 um 9:25 Uhr


  • @EJP, von main Der Autor meinte die aufrufende Methode. Seine Antwort ist ziemlich gut. +1 😉

    – dom_beau

    7. März 2014 um 13:46 Uhr

  • @dom_beau Wenn er das gemeint hat, hätte er es sagen sollen. Was er gesagt hat, war falsch. An dieser Antwort ist nichts „ziemlich gut“. Es ist nur ein wirres Durcheinander.

    – Benutzer207421

    26. Mai 2015 um 12:27 Uhr

963900cookie-checkWas ist der Unterschied zwischen Thread start() und Runnable run()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy