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:
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
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.
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.
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.
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 ().
aufSie 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.
Tags und Links java multithreading