¿Cuándo Thread.sleep de Java lanza InterruptedException? ¿Es seguro ignorarlo? No estoy haciendo ningún subproceso múltiple. Solo quiero esperar unos segundos antes de reintentar alguna operación.
110
¿Cuándo Thread.sleep de Java lanza InterruptedException? ¿Es seguro ignorarlo? No estoy haciendo ningún subproceso múltiple. Solo quiero esperar unos segundos antes de reintentar alguna operación.
InterruptedException
es una excepción capturada, por lo que no se puede compilar a menos que manipule o declarar este tipo de excepción en cualquier método que se une o duerme unaThread
o llamadaswait()
sobreObject
.Respuestas:
Por lo general, NO debe ignorar la excepción. Eche un vistazo al siguiente documento:
Vea el documento completo aquí:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
fuente
Si
InterruptedException
se lanza un, significa que algo quiere interrumpir (generalmente terminar) ese hilo. Esto se activa mediante una llamada alinterrupt()
método threads . El método de espera detecta eso y lanza unInterruptedException
para que el código de captura pueda manejar la solicitud de terminación de inmediato y no tenga que esperar hasta que finalice el tiempo especificado.Si lo usa en una aplicación de un solo subproceso (y también en algunas aplicaciones de varios subprocesos), esa excepción nunca se activará. No recomendaría ignorarlo al tener una cláusula de captura vacía. El lanzamiento del
InterruptedException
borra el estado interrumpido del hilo, por lo que si no se maneja correctamente, esa información se pierde. Por lo tanto, propondría ejecutar:Lo que establece ese estado de nuevo. Después de eso, termina la ejecución. Este sería un comportamiento correcto, incluso si no se utiliza nunca.
Lo que podría ser mejor es agregar esto:
... declaración al bloque de captura. Eso básicamente significa que nunca debe suceder. Entonces, si el código se reutiliza en un entorno en el que podría suceder, se quejará de ello.
fuente
RuntimeException
.El boletín de Java Specialists (que puedo recomendar sin reservas) tenía un artículo interesante sobre esto y cómo manejar el
InterruptedException
. Vale la pena leerlo y digerirlo.fuente
Los métodos como
sleep()
ywait()
de claseThread
pueden arrojar unInterruptedException
. Esto sucederá si algún otrothread
quisiera interrumpir althread
que está esperando o durmiendo.fuente
Una forma sólida y fácil de manejarlo en código de un solo hilo sería capturarlo y volver a ejecutarlo en una RuntimeException, para evitar la necesidad de declararlo para cada método.
fuente
Por
InterruptedException
lo general, se lanza cuando se interrumpe el sueño.fuente