InterruptedException от Thread.sleep()

В Java Thread.sleep() выдает InterruptedException. Что правильно делать с этим исключением?

Нужно ли мне

  1. распространять исключение вверх по цепочке вызовов?
  2. проглотить исключение?
  3. делать что-то еще (пожалуйста, предложите)?

person Michael McCray    schedule 02.08.2010    source источник
comment
Зависит от того, почему произошло исключение. Это теоретический вопрос или вы имеете в виду вариант использования?   -  person Jim Garrison    schedule 02.08.2010


Ответы (2)


Вы должны повторно создать исключение.

Это реферат Брайана Гетца, автора прекрасной книги "Java Concurrency in Practice":

Что делать с InterruptedException:

Если создание InterruptedException означает, что метод является блокирующим, то вызов блокирующего метода означает, что ваш метод также является блокирующим, и у вас должна быть стратегия для работы с InterruptedException. Часто самой простой стратегией является создание InterruptedException самостоятельно, как показано в методах putTask() и getTask() в листинге 1. Это также делает ваш метод чувствительным к прерыванию и часто не требует ничего, кроме добавления InterruptedException в предложение throws.

См.: Работа с InterruptedException

person Thierry-Dimitri Roy    schedule 02.08.2010
comment
Другой возможностью является немедленное повторное подтверждение статуса прерывания. Thread.currentThread().interrupt(). Иногда это полезно, если вы не контролируете вызываемый API (возможно, вы реализуете какой-то сторонний интерфейс), но хотите, чтобы статус прерывания сохранялся, чтобы его можно было заметить как более поздний метод проверки/блокировки. - person Mike Q; 02.08.2010

Если все, что вы пытаетесь сделать, это сжечь НЕКОТОРОЕ время, я бы предложил просто перехватить и проигнорировать исключение.

Если, с другой стороны, вам нужно надлежащее время ожидания, и любое упреждающее прерывание ДЕЙСТВИТЕЛЬНО ПЛОХО для вашей программы, тогда вам определенно следует повторно сгенерировать исключение.

Это просто зависит от того, почему произошло исключение и каков ваш вариант использования для Thread.sleep() в первую очередь.

person Platinum Azure    schedule 02.08.2010