На самом деле, нецелесообразно сравнивать Runnable
и Thread
друг с другом.
У этих двух есть зависимость и взаимосвязь в многопоточности, как Wheel and Engine
отношение автомобиля.
Я бы сказал, есть только один способ многопоточности с двумя шаги. Позвольте мне высказать свою мысль.
Runnable: при реализации interface Runnable
это означает, что вы создаете что-то, что run able
в другом потоке. Теперь создание чего-то, что может работать внутри потока (runnable внутри потока), не означает создание Thread. Таким образом, класс MyRunnable
- не что иное, как обычный класс с методом void run
. И это объекты будут обычными объектами только с методом run
, который будет нормально выполняться при вызове. (если мы не передадим объект в потоке).
Тема: class Thread
, я бы сказал, очень специальный класс с возможностью запуска нового потока, который фактически позволяет многопоточность через start()
метод.
Почему не разумно сравнивать? Потому что нам нужны оба для многопоточности.
Для многопоточности нам нужны две вещи:
Так что технически и теоретически оба из них необходимы, чтобы начать поток, один запустится, и один сделает
Вот почему вы не можете запустить нить с MyRunnable
, вам нужно передать ее в экземпляр Thread
.
Но можно создать и запустить поток только с помощью class Thread
, потому что класс Thread
реализует Runnable
, поэтому мы все знаем, что Thread
также является Runnable
внутри.
Наконец Thread
] и Runnable
дополняют друг друга для многопоточности, не являющейся конкурентом или заменой.