Когда ты напрямую вызываешь метод run() на объекте потока в Java, это не создаёт отдельный поток. Вместо этого метод выполняется синхронно в текущем потоке (обычно в главном потоке).
Использование метода start() (правильный способ):
run() выполняется асинхронно в этом новом потокеПрямой вызов метода run() (неправильный способ):
run() выполняется как обычный вызов метода// Неправильно - выполняется в главном потоке
thread.run();
// Правильно - создаёт новый поток
thread.start();
Прямой вызов run() лишает смысла многопоточность. Твоё приложение теряет возможность:
Программа будет ждать завершения метода run() перед тем, как продолжить, что приводит к блокирующему выполнению вместо параллельного.
Всегда используй start() для запуска потока, а не run(). Метод start() внутри сам берёт на себя создание потока и затем вызывает run() в нужном контексте.
Прямой вызов run() на объекте потока создаёт новый поток, который выполняется асинхронно и параллельно с вызывающим потоком.
Новый — ещё не проверен сообществом
Вы