Pergunta

O resultado é: RunnableA ThreadB
Eu não entendo como isso vem ??(o que acontece no método run na 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();
    }
}
Foi útil?

Solução

Veja cuidadosamente a implementação do método run da classe Thread como em:

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

Portanto, chamar o método run de Thread chama a execução do Runnable que é passado. No seu caso, você passou a instância de A ao criar Thread t.Portanto, a chamada para super.run () chama o método run da classe Thread que, por sua vez, chama o método run do A (que pode ser executado ou o destino).

Outras dicas

Conforme você chama super.run() em B#run, ele executará Thread#run e o próximo método run da instância de Runnable que você passou para o construtor será executado.

Thread.run simplesmente chama o método run da implementação Runnable que você forneceu.Mas você NUNCA deve chamar Thread.run, em vez disso, chame Thread.start.

Porque você tem a subclasse B e substituiu seu método run().

Ele chamará primeiro o método B.

e no B do run(), ele encontra a super chamada para que chame super run() (que executará o Runnable fornecido run()) primeiro e, em seguida, execute B run()

quando você criou o objeto da classe B e passou a para ele, o construtor da classe b foi chamado. O que está no construtor de B? super (r); isso define r como a super chamada. agora, em main, quando você diz t.run (), ele chama o método sobrescrito da classe B, que chama o método run do objeto ao qual você vinculou super dizendo super (r). então o método run de a é chamado primeiro eentão "ThreadB" é impresso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top