Чем вызов start() у потока отличается от прямого вызова run()?
- Как создать поток в Java?
- Можно ли вызвать start() у потока дважды?
start() создаёт новый поток, и уже он вызывает run(); прямой run() выполняется в текущем потоке, как обычный метод.
- Повторный start() → IllegalThreadStateException: поток одноразовый
- Способы: Thread с Runnable, ExecutorService, виртуальные потоки
А ещё В современном коде потоки руками почти не создают — задачи отдают в пул
Подробно
Thread.start() просит JVM создать новый поток выполнения; в нём будет вызван метод run(). Сам start() сразу возвращает управление, и теперь код работает параллельно.
Если вызвать run() напрямую, никакого нового потока не появится: метод выполнится в текущем потоке, как любой другой. Это классическая ошибка — код выглядит многопоточным, но работает последовательно, и заметно это только по производительности или по имени потока в логах.
Объект Thread одноразовый: повторный start() бросит IllegalThreadStateException, даже если поток уже завершился.
Способы запустить задачу:
new Thread(runnable).start()— вручную, для учебных примеров;ExecutorService— пул потоков, основной вариант в приложениях;Thread.ofVirtual().start(...)илиExecutors.newVirtualThreadPerTaskExecutor()— виртуальные потоки (Java 21).
Наследоваться от Thread обычно не стоит — лучше передавать Runnable или Callable.
Пример
Runnable task = () -> System.out.println(Thread.currentThread().getName());
task.run(); // main
new Thread(task).start(); // Thread-0Что хотят услышать
- start() создаёт поток, run() — обычный вызов.
- Одноразовость объекта Thread.
- Современные способы: пулы и виртуальные потоки.
Частые ошибки
- Вызывать run() напрямую и считать, что работа идёт параллельно.
- Пытаться повторно запустить завершившийся поток.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗run() создаёт новый поток, а start() лишь помечает его готовым
- ✗Разницы нет: оба метода запускают поток
- ✓start() создаёт новый поток
- ✗start() выполняет метод синхронно и дожидается результата
Что спросят дальше
- Почему объект потока нельзя запустить дважды?
- Зачем задачи обычно отдают в пул, а не создают потоки вручную?
Разбор темы
- Потоки: создание, состояния и отмена
Thread и Runnable, стоимость платформенных потоков, состояния жизненного цикла, кооперативное прерывание и daemon-потоки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.