Наследование vs Реализация:
Thread - это класс, который нужно наследовать (extends)Runnable - это интерфейс, который нужно реализовывать (implements)Гибкость:
Runnable ваш класс может наследовать другой класс (так как Java не поддерживает множественное наследование)Thread вы ограничены, так как уже наследуете Thread и не можете наследовать что-то ещеПовторное использование:
Runnable можно использовать повторно, передавая один экземпляр в несколько потоковThread создает новую сущность потока каждый раз// Пример с Thread
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running");
}
}
// Пример с Runnable
class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable is running");
}
}
Thread:
Runnable:
Runnable обычно предпочтительнее из-за лучшей архитектурыRunnable более экономичен по памяти при создании множества потоковRunnable объект для нескольких потоков// Пример повторного использования Runnable
Runnable sharedRunnable = new MyRunnable();
Thread t1 = new Thread(sharedRunnable);
Thread t2 = new Thread(sharedRunnable);
t1.start();
t2.start();
Thread - конкретная реализация потокаRunnable - задача, которая может быть выполнена в потокеRunnable (и Callable)Runnable соответствует принципу единственной ответственности (SOLID)Runnable позволяет разделить логику задачи и механизм выполнения