Quando o Java's Thread.sleep lança InterruptedException? É seguro ignorar isso? Não estou fazendo nenhum multithreading. Só quero esperar alguns segundos antes de tentar novamente alguma operação.
110
Quando o Java's Thread.sleep lança InterruptedException? É seguro ignorar isso? Não estou fazendo nenhum multithreading. Só quero esperar alguns segundos antes de tentar novamente alguma operação.
InterruptedException
é uma exceção capturada, então você não pode compilar a menos que você lidar com ou declarar este tipo de exceção em qualquer método que une ou acomoda umThread
ou chamadaswait()
sobreObject
.Respostas:
Você geralmente NÃO deve ignorar a exceção. Dê uma olhada no seguinte artigo:
Veja o artigo completo aqui:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
fonte
Se um
InterruptedException
for lançado, significa que algo deseja interromper (geralmente encerrar) esse segmento. Isso é disparado por uma chamada aointerrupt()
método threads . O método de espera detecta isso e lança umInterruptedException
para que o código catch possa lidar com a solicitação de encerramento imediatamente e não tenha que esperar até que o tempo especificado termine.Se você usá-lo em um aplicativo single-threaded (e também em alguns aplicativos multithread), essa exceção nunca será disparada. Ignorá-lo por ter uma cláusula catch vazia, eu não recomendaria. O lançamento de
InterruptedException
limpa o estado interrompido da discussão, então, se não for tratada corretamente, essas informações serão perdidas. Portanto, eu proporia executar:O que define esse estado novamente. Depois disso, termine a execução. Este seria um comportamento correto, mesmo difícil nunca usado.
O que pode ser melhor é adicionar isto:
... declaração para o bloco catch. Isso basicamente significa que isso nunca deve acontecer. Portanto, se o código for reutilizado em um ambiente onde isso possa acontecer, ele reclamará.
fonte
RuntimeException
.O boletim informativo Java Specialists (que posso recomendar sem reservas) tinha um artigo interessante sobre isso e como lidar com o
InterruptedException
. Vale a pena ler e digerir.fonte
Métodos como
sleep()
ewait()
de classeThread
podem lançar umInterruptedException
. Isso acontecerá se algum outrothread
quiser interromper othread
que está esperando ou dormindo.fonte
Uma maneira sólida e fácil de manipulá-lo em código de thread único seria capturá-lo e recuperá-lo em uma RuntimeException, para evitar a necessidade de declará-lo para cada método.
fonte
O
InterruptedException
geralmente é lançado quando um sono é interrompido.fonte