Thread как остановить поток java — Q&A Хекслет
2026-02-26 16:32 Diff

Принудительно останавливать поток крайне не рекомендуется. Соответствующий метод был признан "нежелательным" к использованию (Документация Oracle). Проблема в том, что поток может быть остановлен в процессе выполнения операции и приведет к ошибке, которую сложно будет выявить и исправить. Кроме того, внезапная остановка может привести к потере данных.

Вместо принудительной остановки потока необходимо использовать метод оповещения о прекращении работы потока - interrupt(). Данный метод установит флаг прерывания потока (прекращения работы), который можно проверить методом isInterrupted() и указать логику его обработки и завершения работы потока.

Если же поток был заблокирован, находился в ожидании (wait, sleep, join), то будет сброшен флаг прерывания и выброшено исключение InterruptedException. В таком случае, после обработки исключения и для прерывания потока, необходимо заново установить флаг прерывания методом interrupt().

Пример:

При запуске данного кода будет выполнено 3 задачи, хотя в цикле сгенерируется 5 задач. Все потому, что метод interrupt() будет вызван с 3-х секундной задержкой, поток выполнит текущую задачу (в данном случае 3-ю) и завершится.