Exécuter la méthode dans la classe de threads
-
28-10-2019 - |
Question
La sortie est: runnablea threadb
Je ne comprends pas comment ça vient ?? (Que se passe-t-il dans la méthode Run dans la classe 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();
}
}
La solution
Voir soigneusement la mise en œuvre de la méthode d'exécution de la classe de threads ITS comme sous:
public void run() {
if (target != null) {
target.run();
}
}
Ainsi, l'appel de la méthode d'exécution du thread appelle l'exécution du runnable qui est passé, dans votre cas, vous avez passé l'instance d'un moment créant du thread t. Ainsi, l'appel à super.run () appelle la méthode d'exécution de la classe de threads qui à son tour appelle la méthode d'exécution de l'A (qui est exécuté ou la cible).
Autres conseils
Comme vous appelez super.run()
dans B#run
il exécutera Thread#run
et ensuite run
Méthode de l'instance de Runnable
Vous êtes transmis au constructeur sera exécuté.
Thread.run
appelle simplement le run
Méthode de la Runnable
implémentation que vous l'avez donné. Mais tu ne devrais jamais appeler Thread.run
, appelez plutôt Thread.start
.
Parce que tu as une sous-classe B
et remplacé sa méthode run()
.
Ça va appeler B
la méthode d'abord.
et en B
's run()
il trouve le super appel pour qu'il appelle super
's run()
(qui exécutera le fourni Runnable
's run()
) d'abord puis exécuter B
's run()
Lorsque vous avez créé l'objet de la classe B et que vous y êtes passé, le constructeur de la classe B a été appelé. Qu'est-ce que le constructeur de B? super (r); Cela met R pour être le super appel. Maintenant, dans le principal lorsque vous dites t.run (), il appelle la méthode remplacée de la classe B qui appelle la méthode d'exécution de l'objet avec lequel vous avez été super en disant super (r). Ainsi, la méthode d'exécution de A est appelée d'abord et Ensuite, "Threadb" est imprimé.