Если InterruptedException
выбрано, это означает, что что-то хочет прервать (обычно завершить) этот поток. Это запускается вызовом interrupt()
метода нитей . Метод ожидания обнаруживает это и генерирует, InterruptedException
чтобы код catch мог немедленно обработать запрос на завершение и не ждать, пока истечет указанное время.
Если вы используете его в однопоточном приложении (а также в некоторых многопоточных приложениях), это исключение никогда не будет запущено. Игнорировать это, имея пустое предложение catch, я бы не рекомендовал. Бросок InterruptedException
очищает прерванное состояние потока, поэтому при неправильной обработке эта информация теряется. Поэтому предлагаю запустить:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
Что снова устанавливает это состояние. После этого завершите выполнение. Это было бы правильным поведением, даже жестким никогда не использовалось.
Что может быть лучше, так это добавить это:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... оператор в блок catch. По сути, это означает, что этого никогда не должно происходить. Поэтому, если код повторно используется в среде, где это может произойти, он будет жаловаться на это.