метод run в классе Thread
-
28-10-2019 - |
Вопрос
Результат: 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».