Domanda

L'output è: RunnableA ThreadB
Non capisco come viene ??(cosa succede nel metodo run nella 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();
    }
}
È stato utile?

Soluzione

Guarda attentamente l'implementazione del metodo run della classe Thread come sotto:

  public void run() {
    if (target != null) {
        target.run();
    }
    }

Quindi chiamare il metodo run di Thread chiama l'esecuzione del Runnable che viene passato, Nel tuo caso hai passato l'istanza di A durante la creazione di Thread t.Quindi la chiamata a super.run () chiama il metodo run della classe Thread che a sua volta chiama il metodo run della A (che è eseguibile o target).

Altri suggerimenti

Quando chiami super.run() in B#run, verrà eseguito Thread#run e verrà eseguito il successivo metodo run dell'istanza di Runnable passato al costruttore.

Thread.run chiama semplicemente il metodo run dell'implementazione Runnable che gli hai fornito.Ma non dovresti MAI chiamare Thread.run, invece Thread.start.

Perché hai la sottoclasse B e hai sovrascritto il suo metodo run().

Chiamerà prima il metodo B.

e nel B di run() trova la super chiamata, quindi chiama il super di run() (che eseguirà il Runnable del run() fornito) e quindi esegue il B di run()

quando hai creato l'oggetto della classe B e gli hai passato a, il costruttore della classe b è stato chiamato. Cosa c'è nel costruttore di B? super (r); questo imposta r come la super chiamata. ora in generale quando dici t.run () chiama il metodo sovrascritto della classe B che chiama il metodo run dell'oggetto a cui hai associato super dicendo super (r). quindi il metodo run di a viene chiamato prima equindi "ThreadB" viene stampato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top