Pregunta

El resultado es: RunnableA ThreadB
No entiendo como viene(qué sucede en el método de ejecución en la clase 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();
    }
}
¿Fue útil?

Solución

Vea detenidamente la implementación del método de ejecución de la clase Thread como se muestra en:

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

Entonces, llamar al método run de Thread llama a la ejecución del Runnable que se pasa. En su caso, ha pasado la instancia de A mientras creaba Thread t.Entonces, llamar a super.run () llama al método de ejecución de la clase Thread, que a su vez llama al método de ejecución de A (que es ejecutable o el objetivo).

Otros consejos

Cuando llame a super.run() en B#run, se ejecutará Thread#run y se ejecutará el siguiente método run de la instancia de Runnable que pasó al constructor.

Thread.run simplemente llama al método run de la implementación Runnable que le dio.Pero NUNCA debe llamar a Thread.run, en su lugar llame a Thread.start.

Porque tiene la subclase B y anuló su método run().

Primero llamará al método B.

y en B de run() encuentra la super llamada para que llame al super de run() (que ejecutará el Runnable del run() proporcionado) primero y luego ejecutará B de run()

cuando creaste el objeto de la clase B y le pasaste a, se llamó al constructor de la clase b. ¿Qué hay en el constructor de B? super (r); esto establece que r sea la súper llamada. ahora en main cuando dices t.run (), llama al método anulado de la clase B que llama al método de ejecución del objeto con el que has enlazado super diciendo super (r). Así que el método de ejecución de a se llama primero yluego se imprime "ThreadB".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top