Die Thread -Klasse enthält Start () und Run () -Methoden. Dieses Kapitel wird dies beantworten. Der Inhalt dieses Kapitels enthält:
Beschreibung des Unterschieds zwischen start () und run ()
Beispiel für den Unterschied zwischen start () und run ()
Der Quellcode in Bezug auf start () und run () (basierend auf JDK1.7.0_40)
Beschreibung des Unterschieds zwischen start () und run ()
start (): Seine Funktion besteht darin, einen neuen Thread zu starten, und der neue Thread führt die entsprechende Run () -Methode aus. start () kann nicht wiederholt aufgerufen werden.
run (): run () kann wiederholt genauso wie gewöhnliche Mitgliedsmethoden aufgerufen werden. Wenn Sie Run () getrennt anrufen, wird run () im aktuellen Thread ausgeführt und der neue Thread wird nicht gestartet!
Das Folgende ist ein Code zu erklären.
Die Codekopie lautet wie folgt:
Klasse MyThread erweitert Thread {
public void run () {
...
}
};
MyThread MyThread = New MyThread ();
mythead.start () startet einen neuen Thread und führt die Run () -Methode im neuen Thread aus.
MyThread.run () führt die Run () -Methode direkt im aktuellen Thread aus und startet keinen neuen Thread zum Run ().
Beispiel für den Unterschied zwischen start () und run ()
Nachfolgend zeigen Sie den Unterschied zwischen ihnen mit einem einfachen Beispiel. Der Quellcode lautet wie folgt:
Die Codekopie lautet wie folgt:
public synchronisierte void start () {
// Wenn der Thread nicht "bereit" ist, wird eine Ausnahme ausgelöst!
if (threadstatus! = 0)
neue illegalTheadStateException () werfen;
// Threadgruppe Thread hinzufügen
Group.Add (dies);
Boolean begann = falsch;
versuchen {
// Start den Thread über start0 ()
start0 ();
// Setzen Sie das Start -Tag
gestartet = wahr;
} Endlich {
versuchen {
if (! begonnen) {
Gruppe.ThreadStartFailed (this);
}
} catch (Throwable Ignore) {
}
}
}
Auslaufergebnisse:
Die Codekopie lautet wie folgt:
Hauptaufruf mythead.run ()
Main läuft
Hauptaufruf mythead.start ()
MyThread läuft
Ergebnisse Beschreibung:
(01) Thread.CurrentThread (). GetName () ist der Name, mit dem der "aktuelle Thread" abgerufen wird. Der aktuelle Thread bezieht sich auf den Thread, der in der CPU ausgeführt werden soll.
(02) mythead.run () wird in "Haupt -Thread Main" bezeichnet, und die Run () -Methode wird direkt auf "Haupt -Thread Main" ausgeführt.
(03) MyThread.start () wird "Thread MyThread" gestartet.
Der Quellcode in Bezug auf start () und run () (basierend auf JDK1.7.0_40)
Der Quellcode der Start () -Methode in Thread.java lautet wie folgt:
Die Codekopie lautet wie folgt:
public synchronisierte void start () {
// Wenn der Thread nicht "bereit" ist, wird eine Ausnahme ausgelöst!
if (threadstatus! = 0)
neue illegalTheadStateException () werfen;
// Threadgruppe Thread hinzufügen
Group.Add (dies);
Boolean begann = falsch;
versuchen {
// Start den Thread über start0 ()
start0 ();
// Setzen Sie das Start -Tag
gestartet = wahr;
} Endlich {
versuchen {
if (! begonnen) {
Gruppe.ThreadStartFailed (this);
}
} catch (Throwable Ignore) {
}
}
}
Hinweis: start () startet den Thread tatsächlich über die lokale Methode start0 (). Start0 () wird einen neuen Thread ausgeführt, und der neue Thread ruft die Run () -Methode auf.
Die Codekopie lautet wie folgt:
Privat native void start0 ();
Der Code von run () in Thread.java lautet wie folgt:
Die Codekopie lautet wie folgt:
public void run () {
if (Ziel! = null) {
target.run ();
}
}
Beschreibung: Ziel ist ein ausgeführter Objekt. Run () wird die Run () -Methode des Runnable -Elements des Thread -Threads direkt aufrufen und erstellt keinen neuen Thread.