Unterschied zwischen dem Ausführen und Starten eines Threads [duplizieren]

7

Ich verstehe nicht den Unterschied zwischen dem Starten und Ausführen eines Threads, ich testete die beiden Methoden und sie gibt das gleiche Ergebnis aus, zuerst habe ich eine Kombination von run () verwendet und starte auf demselben Thread und sie haben die gleiche Funktion wie folgt:

%Vor%

}

Die Ausgabe ist:

%Vor%

Dann sah ich das Javadoc der run () Methode sagte, dass: If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns , also habe ich versucht, die run () -Methode ohne eine separate Runnable wie folgt zu verwenden:

%Vor%

und es führt auch die run () -Methode aus und gibt Running Normal Thread aus, obwohl es ohne ein separates runnable erstellt wurde! Also, was ist der Hauptunterschied zwischen den beiden Methoden

    
Java Player 05.04.2013, 18:47
quelle

4 Antworten

23

Thread.run() erzeugt keinen neuen Thread, während Thread.start() dies tut, dh Thread.run läuft tatsächlich auf demselben Thread wie der Aufrufer, während Thread.start() einen neuen Thread erstellt, auf dem die Aufgabe ausgeführt wird.

    
Extreme Coders 05.04.2013, 18:48
quelle
11

Wenn Sie run aufrufen, führen Sie nur die Methode run im aktuellen Thread aus. Ihr Code wird also nicht multi-threaded sein.

Wenn Sie start aufrufen, wird ein neuer Thread gestartet und die Methode run wird für diesen neuen Thread ausgeführt.

    
Denys Séguret 05.04.2013 18:48
quelle
1

Ein Thread durchläuft während seines Lebenszyklus verschiedene Phasen. Wenn Sie die start () -Methode aufrufen, wird der Thread in den Runnable-Zustand und nicht in den Running-Zustand versetzt.

Dann schaufelt der Scheduler einen Thread aus dem Thread-Pool, der darauf wartet, ausgeführt zu werden, und setzt ihn in die running stage. Bei dieser tatsächlichen Ausführung des Threads findet statt.

    
Ankur Shanbhag 05.04.2013 18:51
quelle
0

In Ihrem ersten Beispiel rufen Sie die run () -Methode direkt aus dem Hauptthread und dann einmal aus einem separaten Thread auf, indem Sie t.start () aufrufen.

Im zweiten Fall erstellt t.start () einen separaten Thread-Kontext und ruft aus diesem Kontext t.run ().

auf

Sie haben auch die Dokumentation für die Methode run () hinzugefügt:

  

Wenn dieser Thread mit einem separaten Runnable Run-Objekt erstellt wurde,   dann wird die run-Methode des Runnable-Objekts aufgerufen. ansonsten, das   Methode macht nichts und gibt

zurück

Dies ist richtig, wenn Sie die run () -Methode nicht überschreiben, wird sie einfach zurückgeliefert, wodurch der Thread beendet wird. Sie haben die run () -Methode in Ihren Thread-Objekten überschrieben, sodass die überschriebene Methode (die nichts tut) nicht aufgerufen wird.

    
Jamie 05.04.2013 18:50
quelle

Tags und Links