Runnable- интерфейс задачи с методом run().
Thread- исполнитель задачи в новом потоке.
Сам Threadтак же реализует интерфейс Runnableи запускает свою собственную задачу, определенную в его методе run(), в новом потоке, по-умолчанию его задачей является запустить переданную ему другую задачу, например через конструктор new Thread(Runnable).
Самостоятельно метод run() у объекта Thread никогда не вызывается, так как суть объекта Thread, это создать новый поток, а затем jvm сама начнет выполнение задачи вызовом метода run() уже в новом потоке.