Ich habe kürzlich eine Frage mit dem Code wie folgt gesehen:
Die Codekopie lautet wie folgt:
public static void main (String args []) {
Thread t = neuer Thread () {
public void run () {
pong ();
}
};
t.run ();
System.out.println ("Ping");
}
statischer void pong () {
System.out.println ("pong");
}
Frage: Was wird das Ergebnis ausgeben?
Ich habe es oft gelaufen und es stellte sich heraus, dass es Pong Ping war. Später entdeckte ich schließlich den Schlüsselpunkt, das Thread -Objekt t, das nicht die Start () -Methode, sondern die Run () -Methode aufruft. Später öffnete ich das Breakpoint -Modus -Debuggen und stellte fest, dass das Programm nur einen Thread im gesamten Programm aufgerufen hatte, als ich die Run () -Methode anrief. Nur dann können wir mit dem Hauptfaden für die CPU konkurrieren, und es kann mehrere Ergebnisse geben, aber da die folgende Ausgabemethode schnell ausgeführt wird, ist es im Grunde die Ausgabe von "Ping -Pong".
Der Unterschied zwischen run () und start () beträgt also:
Run () ist eine Methode, die in der Runnable -Schnittstelle definiert ist, mit der Client -Programmierer in dieser Methode ihren eigenen Funktionscode schreiben können. Es gibt keinen Unterschied zwischen direktem Anrufen und Anrufen Ihrer eigenen Mitgliedermethoden nach normalen Klassen.
start () ist ein Flag, das der Thread ausgeführt wird.
Ich denke, wenn Sie einen separaten Thread schreiben möchten, müssen Sie ihn immer noch im Haupt -Thread mit neuem Thread (neuer Thread (New YourRunnableClass ()) erben, wenn Sie die Schnittstelle implementieren. .