14. Как правильно остановить поток? Для чего нужны методы .stop(), .interrupt(), .interrupted(), .isInterrupted().
UNKNOWN.stop() помечен как deprecated. Потому что он просто останавливал поток без какой-либо дополнительной работы.
Как известно метод Thread.stop() объявлен как Deprecated поскольку «не потокобезопасен», а безопасная инструкция Thread.interrupt() только сообщает потоку о необходимости остановки. Но если данное сообщение проигнорировано, т.е. разработчик не вставил обработку, то и поток не остановится. Сам разработчик пишет выход из потока! (например If (условие выхода и isInterrupted()) – break)
interrupt() - Вызов этого метода устанавливает у потока статус, что он прерван. Сам метод возвращает true, если поток может быть прерван, в ином случае возвращается false.
clockThread.interrupt();
Метод interrupt() также способен вывести поток из состояния ожидания или спячки. Т.е. если у потока были вызваны методы sleep() или wait() – текущее состояние прервется и будет выброшено исключение InterruptedException. Флаг в этом случае не выставляется.
isInterrupted() – Нестатический метод используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
Предыдущий вопрос: 13. Чем отличаются методы yield() и sleep()?
Следующий вопрос: 15. Чем Runnable отличается от Callable?
Все вопросы по теме: список
Все темы: список
Вопросы/замечания/предложения/нашли ошибку: напишите мне