Чем Thread, Runnable и Callable отличаются?
Thread — сам поток выполнения. Runnable — задача без результата (void run()), Callable<V> — задача с результатом V call(), которая может бросить проверяемое исключение.
- Runnable и Callable описывают работу, а запускает её Thread или пул
- Результат Callable получают через Future
- Наследовать Thread ради задачи — плохая практика: смешивает «что» и «как»
А ещё Оба — функциональные интерфейсы, удобно писать лямбдами
Подробно
Thread — объект, управляющий потоком ОС (или виртуальным потоком): start, join, interrupt, имя, приоритет, daemon.
Runnable — описание задачи:
Runnable r = () -> System.out.println("работа");
new Thread(r).start();
Ничего не возвращает и не может бросить проверяемое исключение.
Callable<V> — задача с результатом:
Callable<Integer> c = () -> compute();
Future<Integer> f = executor.submit(c);
int result = f.get(); // ждёт и возвращает; исключение — в ExecutionException
Thread сам Callable не принимает — его отдают в ExecutorService или оборачивают в FutureTask.
Почему не наследовать Thread: задача привязывается к способу выполнения, её нельзя отдать в пул, а Java не даёт множественного наследования. Правильно — задача как Runnable или Callable, выполнение — через пул или виртуальные потоки.
Что хотят услышать
- Роли трёх сущностей.
- Результат и исключения у Callable, Future.
- Почему задачу не делают наследником Thread.
Частые ошибки
- Вызывать run() вместо start() и ждать новый поток.
- Создавать неограниченное число Thread вручную.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Callable не возвращает результат, а Runnable возвращает и может бросить исключение
- ✗Все три — это потоки выполнения
- ✗Thread нельзя запустить без Callable
- ✓Runnable — задача без результата, Callable — с результатом, Thread — сам поток
Что спросят дальше
- Зачем нужен ExecutorService?
- Чем Future отличается от CompletableFuture?
Разбор темы
- Потоки: создание, состояния и отмена
Thread и Runnable, стоимость платформенных потоков, состояния жизненного цикла, кооперативное прерывание и daemon-потоки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.