Easythread
В чём разница между Thread.start() и Thread.run()?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
start() создаёт новый поток ОС и вызывает run() в нём. run() — обычный метод, выполняется в текущем потоке синхронно (никакого нового потока).
Thread t = new Thread(() -> System.out.println("hi"));
t.start(); // НОВЫЙ поток, параллельно с main
t.run(); // обычный вызов в текущем потоке (частая ошибка)
// t.start(); // повторно — IllegalThreadStateExceptionСостояния потока (Thread.State):
- NEW — создан, не запущен;
- RUNNABLE — после
start(); - BLOCKED — ждёт monitor;
- WAITING —
Object.wait,Thread.joinбез timeout; - TIMED_WAITING —
sleep,wait(timeout); - TERMINATED — после завершения
run()(нельзя перезапустить).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.