Как работает interrupt() и isInterrupted(). При вызове первого значение второго меняется на false и первый без второго не может закрывать нить?
Игорь
41 уровень
Есть вопрос
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2322530
30 ноября 2020, 15:48полезный
interrupt() ставит флаг interrupted в нити в true. но это не гарантирует что нить прервётся. если нет методов в программе, работающих с этим флагом, то нить вообще не прервётся никогда.
isInterrupted() проверяет этот флаг, при проверке не сбрасывает флаг. это метод простой геттер, не более.
закрывать нить можно разными способами, один из них это использовать какой-то метод, который в случае если флаг interrupted = true бросает исключение InterruptException, ты его уже отлавливаешь, логгируешь событие например и закрываешь нить (выходишь из метода run)
например Thread.sleep
+1