Thread
— это класс, некоторая надстройка над физическим потоком.
Runnable
— это интерфейс, представляющий абстракцию над выполняемой задачей.
Помимо того, что Runnable
помогает разрешить проблему множественного наследования, несомненный плюс от его использования состоит в том, что он позволяет логически отделить логику выполнения задачи от непосредственного управления потоком.