Такое поведение обычно задокументировано в методах, которые выдают это исключение.Например, javadoc для Object.wait()
говорит:
"InterruptedException
- если какой-либо поток прервал текущий поток до или в то время, когда текущий поток ожидал уведомления. Прерванный статус текущего потока очищается при возникновении этого исключения."
Действительно, сам Javadoc для исключения говорит следующее:
"Иногда метод может захотеть проверить, был ли текущий поток прерван, и если да, немедленно вызвать это исключение. Для достижения этого эффекта можно использовать следующий код:
if (Thread.interrupted()) // Clears interrupted status!
throw new InterruptedException();
Обратите внимание, как они подчеркивают , что флаг должен быть сброшен до того, как будет сгенерировано исключение.
Почему он был разработан, чтобы работать какэто? Вы должны спросить дизайнеров, но я ожидаю, что они решили, что обработчик исключений должен обрабатывать ситуацию, и поэтому не должно быть необходимости, чтобы флаг все еще устанавливался в этой точке,(Если обработчик не полностью обрабатывает ситуацию, он может либо сбросить исключение, либо вызвать Thread.getCurrentThread.interrupt()
, чтобы снова установить флаг.)