Вопрос

Результат: RunnableA ThreadB
Я не понимаю, как это происходит ??(что происходит в методе run в классе B)

родовое слово
Это было полезно?

Решение

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

родовое слово

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top