метод run в классе Thread - PullRequest
       5

метод run в классе Thread

0 голосов
/ 16 января 2012

Вывод: RunnableA ThreadB
Я не понимаю, как это получается ??(что происходит в методе run в классе 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();
    }
}

Ответы [ 5 ]

3 голосов
/ 16 января 2012

Когда вы вызываете super.run() в B#run, он выполнит Thread#run, и будет выполнен следующий run метод экземпляра Runnable, который вы передали в конструктор.

2 голосов
/ 16 января 2012

Thread.run просто вызывает run метод реализации Runnable, который вы ему дали.Но вы НИКОГДА не должны звонить Thread.run, вместо этого звоните Thread.start.

2 голосов
/ 16 января 2012

Поскольку у вас есть подкласс B и он переопределяет его метод run().

Сначала он вызовет метод B.

и в B run() он находит супер-вызов, поэтому он вызывает super 'run() (который сначала выполнит предоставленный Runnable' run()), а затем выполнит B '* run()

1 голос
/ 16 января 2012

Внимательно посмотрите на реализацию метода run класса Thread, как показано ниже:

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

Итак, вызов метода run для Thread вызывает запуск Runnable, который передается, В вашем случае вы прошлиэкземпляр A при создании Thread t.Поэтому вызов super.run () вызывает метод run класса Thread, который, в свою очередь, вызывает метод run для A (который является runnable или target).

0 голосов
/ 06 марта 2014

когда вы создали объект класса B и передали ему a, конструктор класса b назывался .Whats в конструкторе B? супер (г); это устанавливает г быть супер вызовом. теперь в main, когда вы говорите t.run (), он вызывает переопределенный метод класса B, который вызывает метод run объекта, с которым вы связали super, с помощью super (r). Поэтому метод run a вызывается первым и затем выводится «ThreadB».

...