tipos propias propia propagacion personalizadas excepciones excepcion ejemplos declaracion crear constructores clases java multithreading exception

propias - propagacion de excepciones en java



¿Qué tipo de comportamiento causa una excepción interrumpida? (7)

Algunos consejos de Java Concurrency in Practice:

  • Propague la excepción (posiblemente después de una limpieza específica de tareas), haciendo que su método también sea un método de bloqueo interrumpible; o
  • Restaure el estado de interrupción para que el código más arriba en la pila de llamadas pueda manejarlo.
  • Solo el código que implementa una política de interrupción de subprocesos puede tragarse una solicitud de interrupción. La tarea de propósito general y el código de la biblioteca nunca deben tragar las solicitudes de interrupción.

Soy relativamente nuevo en Threading en Java y me he dado cuenta de que cada vez que uso Thread.sleep () tengo que atrapar InterrupetdException.

¿Qué tipo de comportamiento causa esto, y en aplicaciones simples donde tengo un hilo de monitor puedo simplemente Ignorar la excepción?


Bueno, si algún otro subproceso llama a thread.interupt (), mientras el subproceso está inactivo, obtendrá la excepción. Y sí, probablemente solo puedas poner try..catch around the sleep () e ignorarlo;)


De los javadocs :

Clase InterruptedException

Lanzado cuando un hilo está esperando, durmiendo o pausado por un tiempo prolongado y otro hilo lo interrumpe usando el método de interrupción en el hilo de la clase.

Espero que responda tu pregunta.


El caso principal es cuando alguien llama a Thread.interrupt () en su hilo.

Puede ser más seguro lanzar una RuntimeException si ocurre cuando realmente no la esperas, pero para casos muy simples probablemente puedas ignorarla.


InterruptedException es una excepción marcada, por lo que desafortunadamente no puedes ignorarla. En la mayoría de los casos simples, no tiene que hacer nada en la cláusula de captura porque está seguro de que no sucederá.

De la API

Lanzado cuando un hilo está esperando, durmiendo o pausado por un tiempo prolongado y otro hilo lo interrumpe usando el método de interrupción en el hilo de la clase.


Como han dicho otros, es causado por algún otro hilo que llame a interrupt() en el objeto Thread que está durmiendo.

Lo que esto significa en inglés simple, es que algún otro hilo ha decidido cancelar el hilo de dormir. El bloque try / catch está ahí para que pueda manejar con gracia la cancelación del hilo, y limpiar de forma segura todos los recursos, o cerrar cualquier operación que esté haciendo correctamente.

Si no necesitas hacer nada de eso, entonces sí, aún necesitas un bloque de catch vacío. Pero eso es Java para ti ...


Sucede cuando algo llama a interrupt () en el hilo. Este artículo de Brian Goetz explica el mecanismo de interrupción y cómo debes manejar InterruptedExceptions:

"La respuesta más común a InterruptedException es tragarlo, atraparlo y no hacer nada (o tal vez registrarlo, que no es mejor), como veremos más adelante en el Listado 4. Desafortunadamente, este enfoque arroja importantes información sobre el hecho de que ocurrió una interrupción, lo que podría comprometer la capacidad de la aplicación de cancelar actividades o cerrarla de manera oportuna ".

"Si detecta InterruptedException pero no puede volver a lanzarlo, debe conservar la evidencia de que la interrupción ocurrió [...]. Esta tarea se realiza llamando a interrupt () para" reinterrumpir "el hilo actual.