Necesito saber lo que sucede¿Qué sucede cuando invocas la interrupción de un hilo()?
- cuando está durmiendo?
- cuando se está ejecutando, es decir, está ejecutando la tarea especificada.
Gracias de antemano.
Necesito saber lo que sucede¿Qué sucede cuando invocas la interrupción de un hilo()?
Gracias de antemano.
A juzgar por sus preguntas anteriores, supongo que está interesado en el comportamiento de Java.
En Java, se lanzará un InterruptedException
si el hilo está actualmente bloqueando. Si el hilo no está bloqueando, la excepción no se lanzará.
Para obtener más información, mira aquí:
JavaDocs
Para lenguajes .NET, un ThreadInterruptedException
serán lanzados si el hilo está bloqueando. Si el hilo no está bloqueando, la excepción no se lanzará hasta que el hilo se bloquee.
Por favor, marque su pregunta con el idioma que desea una respuesta.
La interrupción de un hilo es una forma segura de cancelarlo, pero el hilo debe codificarse para prestar atención a las interrupciones. Las operaciones Java largas y bloqueadas que lanzan InterruptedException
arrojarán esa excepción si se produce un .interrupt()
mientras se está ejecutando ese subproceso.
El método .interrupt()
establece el indicador "interrumpido" para ese hilo e interrumpe cualquier operación IO o inactiva. No hace nada más, por lo que depende de su programa responder adecuadamente, y verifique su indicador de interrupción, a través del Thread.interrupted()
, a intervalos regulares.
Si un hilo no verifica las interrupciones, no se puede detener con seguridad. Thread.stop()
is unsafe to use. Así que usa .interrupt()
para detener un hilo, pero cuando escribe código multiproceso, depende de usted asegurarse de que .interrupt()
haga algo sensato. This TechRepublic article is a pretty good tutorial.
** Hola Adam, ** Creo *** "Larga, las operaciones de bloqueo de Java que lanzan InterruptedException emitirán esa excepción si ocurre un .interrupt() mientras el hilo se está ejecutando" *** es una especie de otra forma de evitarlo. Usted dice que ** un hilo está bloqueando **, entonces es porque: 1) Se ha puesto a dormir durante un período de tiempo determinado 2) Se suspende con una llamada a suspender() y se bloqueará hasta que se reanude() mensaje 3) El hilo está suspendido por llamada a wait(), y se convertirá en ejecutable en un notificar o notificar todo mensaje. En todos estos casos anteriores, el hilo no está ejecutando nada, está en estado bloqueado. cuando int – AKh
Historia similar en Java, excepto que (1) la excepción se llama 'InterruptedException', y (2) el hilo tiene un" estado de interrupción "que se establece si el hilo no está esperando o durmiendo. No estoy seguro de si bloquear con el estado de interrupción ya configurado causará la excepción, pero sería la opción menos probable de romper cosas. – cHao