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();
    }
}
Était-ce utile?

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 Bla 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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top