Что такое InterruptedException?
Достаточно просто: Interrupted - переводится как прерванный.
Представим такую ситуацию: есть три потока 1 - главный, не зависит ни от кого, и два других зависящие друг от друга. Допустим второму потоку требуются данные которые получаются в результате выполнения третьего потока. Соответственно мы "усыпляем второй поток" и ждем пока третий выполниться, но при выполнении третьего потока получается ситуация что нужно приостановить или прервать выполнение второго и третьего потока, соответственно мы останавливаем третий поток, а у второго вызываем метод interrupt() (прервать). Когда планировщик потоков попытается возобновить второй поток, он не сможет этого сделать, т.к. второй поток прерван, вот тогда и получается это исключение. Пример не очень удачный, прошу не судить строго.
С одним маленьким замечаниемЕсли вы перехватили InterruptedException, но не можете повторно его сгенерировать, то вы должны сохранить подтверждение того, что прерывание произошло так, чтобы вышестоящий в стеке вызовов код мог узнать о прерывании и среагировать на него, если он хочет это сделать. Эта задача выполняется с помощью вызова interrupt(), чтобы "повторно прервать" текущий поток