Ответ
run() — это обычный вызов метода в текущем потоке. start() — создает новый поток через JVM/ОС, который асинхронно выполняет метод run().
Ключевые отличия:
- Поток выполнения:
run()выполняется в вызывающем потоке (например,main),start()запускает новый поток. - Количество вызовов:
start()можно вызвать для одного объектаThreadтолько один раз,run()— сколько угодно. - Назначение:
start()предназначен для управления жизненным циклом потока,run()содержит код для выполнения.
Пример:
Thread thread = new Thread(() -> {
System.out.println("Выполняется в: " + Thread.currentThread().getName());
});
thread.run(); // Вывод: "Выполняется в: main" (текущий поток)
thread.start(); // Вывод: "Выполняется в: Thread-0" (новый поток)
Почему важно: Вызов start() делегирует планирование потока операционной системе, что обеспечивает истинную параллельность (или конкурентность) на многоядерных CPU.