2010-12-06 10 views

Respuesta

3

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.

+1

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

4

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.

+0

** 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

Cuestiones relacionadas