Что такое InterruptedException?

Уже гуглил - но так и не понял. Объясните на пальцах. Вызываю Thread.sleep() - компилятор просит словить InterruptedException. Хочу знать зачем. javadoc тоже не помог
  • Вопрос задан
  • 17502 просмотра
Решения вопроса 1
@z777
Достаточно просто: Interrupted - переводится как прерванный.
Представим такую ситуацию: есть три потока 1 - главный, не зависит ни от кого, и два других зависящие друг от друга. Допустим второму потоку требуются данные которые получаются в результате выполнения третьего потока. Соответственно мы "усыпляем второй поток" и ждем пока третий выполниться, но при выполнении третьего потока получается ситуация что нужно приостановить или прервать выполнение второго и третьего потока, соответственно мы останавливаем третий поток, а у второго вызываем метод interrupt() (прервать). Когда планировщик потоков попытается возобновить второй поток, он не сможет этого сделать, т.к. второй поток прерван, вот тогда и получается это исключение. Пример не очень удачный, прошу не судить строго.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@igor_suhorukov
С одним маленьким замечанием

Если вы перехватили InterruptedException, но не можете повторно его сгенерировать, то вы должны сохранить подтверждение того, что прерывание произошло так, чтобы вышестоящий в стеке вызовов код мог узнать о прерывании и среагировать на него, если он хочет это сделать. Эта задача выполняется с помощью вызова interrupt(), чтобы "повторно прервать" текущий поток
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы