Вопрос проверяет понимание базовой модели многопоточности в Java и принципов разделения ответственности.
Runnable — это интерфейс, который описывает задачу для выполнения в отдельном потоке. Thread — это конкретный поток исполнения. Runnable не управляет потоком, а только содержит логику. На практике предпочтительнее использовать Runnable, а не наследоваться от Thread.
В Java важно различать что выполнять и в чем выполнять.
Определение:Runnable — интерфейс, описывающий задачу, которая может быть выполнена в потоке.
Особенности:
содержит только метод run()
не управляет жизненным циклом потока
может использоваться с пулом потоков
Runnable task = () -> {
System.out.println("Работа в потоке");
};
Определение:Thread — это объект, представляющий реальный поток выполнения.
Особенности:
управляет запуском и жизненным циклом
содержит метод start()
может принимать Runnable в конструкторе
Thread thread = new Thread(task);
thread.start();
Перед сравнением важно отметить, что Thread — это механизм, а Runnable — это логика.
Runnable позволяет отделить задачу от способа выполнения
наследование от Thread ограничивает иерархию классов
Runnable лучше подходит для масштабирования и пулов потоков
Runnable описывает работу, а Thread выполняет ее, поэтому в реальных приложениях чаще используют Runnable вместе с механизмами управления потоками.