Methode in der Thread-Klasse ausführen
-
28-10-2019 - |
Frage
Die Ausgabe lautet: RunnableA ThreadB
Ich verstehe nicht, wie es kommt?(Was passiert in der Ausführungsmethode in Klasse B)
class A implements Runnable{
public void run(){
System.out.println("RunnableA");
}
}
class B extends Thread{
B(Runnable r){
super(r);
}
public void run(){
super.run();
System.out.println("ThreadB");
}
}
class Demo{
public static void main (String []args){
A a=new A();
Thread t=new B(a);
t.run();
}
}
Lösung
Sehen Sie sich die Implementierung der Ausführungsmethode der Thread-Klasse wie folgt an:
public void run() {
if (target != null) {
target.run();
}
}
Wenn Sie also die run-Methode von Thread aufrufen, wird der Run der ausgeführten Runnable aufgerufen. In Ihrem Fall haben Sie beim Erstellen von Thread t die Instanz von A übergeben.Rufen Sie also super.run () auf, um die Ausführungsmethode der Thread-Klasse aufzurufen, die wiederum die Ausführungsmethode des A aufruft (das ausführbar ist oder das Ziel).
Andere Tipps
Wenn Sie super.run()
in B#run
aufrufen, wird Thread#run
ausgeführt, und die nächste run
-Methode der Instanz von Runnable
, die Sie an den Konstruktor übergeben haben, wird ausgeführt.
Thread.run
ruft einfach die run
-Methode der von Ihnen angegebenen Runnable
-Implementierung auf.Sie sollten jedoch NIEMALS Thread.run
aufrufen, sondern Thread.start
.
Weil Sie den B
der Unterklasse haben und dessen Methode run()
überschrieben haben.
Zuerst wird die Methode von B
aufgerufen.
und im B
von run()
wird der Superaufruf gefunden, sodass der super
von run()
(der den Runnable
des bereitgestellten run()
s ausführt) zuerst aufgerufen und dann der B
von run()
ausgeführt wird
Als Sie das Objekt der Klasse B erstellt und a an es übergeben haben, wurde der Konstruktor der Klasse b aufgerufen. Was ist im Konstruktor von B? super (r); Dies setzt r als Super-Call. Wenn Sie jetzt t.run () sagen, wird hauptsächlich die überschriebene Methode der Klasse B aufgerufen, die die Ausführungsmethode des Objekts aufruft, an das Sie super gebunden haben, indem Sie super (r) sagen. Daher wird die Ausführungsmethode von a zuerst und aufgerufendann wird "ThreadB" gedruckt.