Должны ли мы действительно прерывать текущий поток после перехвата InterruptedException? - PullRequest
0 голосов
/ 15 марта 2020

У меня есть код, который должен ждать некоторое время как часть ожидания занятого (из-за устаревшего кода я не могу так сильно изменить). Я прочитал обоснование, почему я должен сделать это здесь [1] и [2], и это представлено как простое правило. Делай это всегда. IIU C он продается по мере необходимости, потому что некоторый код выше стека вызовов может выполнять такие вещи, как:

while (!Thread.currentThread().isInterrupted()) {

и без вызова

Thread.currentThread().interrupt()

или повторного его сбоя.

Теперь вернемся к моему делу. Я назвал мизерный метод сна. Если я проснулся посреди напряженного ожидания, мне все равно, я снова буду спать, если придется. Если на самом деле есть код, интересующий флаг прерывания потока, я определенно не хочу, чтобы он включался, потому что я не хочу останавливать эту операцию, и в этом случае, глотание без повтора и без установки флага кажется правильным Операция, однако я не видел никаких упоминаний, что ласточка может быть правильной реакцией в некоторых ситуациях.

1 Ответ

1 голос
/ 15 марта 2020

Существует хорошая книга по параллелизму в Java: Java Параллелизм на практике . В главе 7, раздел 7.1.3, есть следующий текст:

Только код, реализующий политику прерывания потока, может проглотить запрос прерывания. Универсальный код задачи и библиотеки никогда не должен проглатывать запросы на прерывание.

Таким образом, позволяет глотать прерывание в некоторых ситуациях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...