Cuando se invoca un Thread.interrupt()
en un subproceso, ¿qué ocurre con ese subproceso?Cuando se invoca un Thread.interrupt() en algún hilo, ¿qué ocurre?
Respuesta
El hilo de destino está "interrumpido". En su mayoría, se establece un indicador en ese hilo, que el hilo puede ver (con Thread.interrupted()
). Si el hilo de destino estaba actualmente bloqueado en algunas E/S o Object.wait()
, se activa con, respectivamente, un InterruptedIOException
o un InterruptedException
.
La interrupción de subprocesos es una forma suave de empujar un hilo. Se usa para darles la oportunidad a los hilos de salir limpiamente, a diferencia de Thread.stop()
, que es más como disparar el hilo con un rifle de asalto.
'InterruptedIOException' es improbable que sea una práctica. La E/S interrumpible se habilitó en Solaris brevemente, pero simplemente no lo vale. Por supuesto, la implementación es específica de la implementación. Normalmente (en los últimos tiempos) el sistema operativo tendrá algo que ver con los hilos. –
+1 para la explicación de usted y la comparación de disparos. – helios
El Javadoc for that method explica qué sucede en qué situación.
Aquí es el JDK 1.6 Javadoc:
interrumpe este hilo.
A menos que el hilo actual es interrumpir sí, que siempre está permitido, el método de checkAccess se invoca este hilo, que puede causar una SecurityException para ser lanzado .
Si este hilo se bloquea en un invocación de la espera(), esperar (largo), o esperar (largo, int) métodos de la clase objeto, o de la unión(), unirse (long), join (long, int), sleep (long), o sleep (long, int), métodos de esta clase, entonces su estado de interrupción se borrará y recibirá InterruptedException.
Si este hilo se bloquea en un/O operación de E sobre un canal interrumpible entonces el canal será cerrado, de estado de interrupción de la rosca se establecerá, y el hilo se recibir un ClosedByInterruptException.
Si este hilo se bloquea en un selector entonces estado de alarma del hilo se puede ajustar y volverá inmediatamente de la operación de selección , posiblemente con un cero no valor, como si del selector de despertar método fue invocado.
Si no se cumple ninguna de las condiciones previas , se activará el estado de interrupción de este hilo.
La interrupción de un hilo que no es vivo no necesita tener ningún efecto.
ZeissS es correcto, la señalización es la forma más limpia de hacerlo. también puede atrapar la excepción de interrupción y limpiar de esa manera.
- 1. Qué evento se invoca cuando pulsamos UISearchBar
- 2. Spring Aspect falla cuando se invoca el punto de unión en un nuevo hilo
- 3. C#: ¿Cómo pausar el hilo y continuar cuando ocurre algún evento?
- 4. ¿Hay algún método en appDelegate que se invoca cuando falla la aplicación?
- 5. ¿Qué función se invoca cuando finaliza la aplicación de iPhone?
- 6. ¿Qué constructor se invoca aquí?
- 7. ¿Qué ocurre cuando importamos un módulo en ironpython?
- 8. ¿Qué sucede con otros hilos cuando un hilo se bifurca()?
- 9. ¿Qué registrar cuando ocurre una excepción?
- 10. ¿Por qué se invoca "operador delete" cuando llamo "eliminar" en un puntero nulo?
- 11. ¿Por qué obtengo un System.ArgumentException cuando se invoca Sort (IComparer) en una lista?
- 12. Cuando se invoca su BroadcastReceiver a través de una intención, ¿en qué proceso se ejecuta?
- 13. ¿Cómo ocurre realmente un syscall en Linux?
- 14. ¿Por qué no se llama inmediatamente a run() cuando start() invoca un objeto de subproceso en java
- 15. ¿Qué sucede cuando se invoca un método estático usando una referencia de objeto nulo?
- 16. ¿Qué ocurre en Excel?
- 17. Eliminar un objeto cuando ocurre una colisión
- 18. ¿Qué sucede cuando un hilo se interrumpe mientras se bloquea en una espera()?
- 19. ¿Qué sucede en la arquitectura x86 cuando ocurre una interrupción?
- 20. ¿Qué ocurre exactamente cuando tienes valores finales y clases internas en un método?
- 21. CLR se cierra cuando un hilo no se maneja. Excepción
- 22. 500.19 error en IIS7 cuando ocurre un error
- 23. ¿Cómo se usa quicklisp cuando se invoca el programa CL como un script de shell?
- 24. ¿Qué ocurre cuando un archivo es `fuente`-d en contexto Unix/Linux?
- 25. ¿En qué instancia de delegado de clase se invoca?
- 26. Cuando ordeno una Lista, ¿qué ocurre con sus iteradores?
- 27. INotifyPropertyChanged: ¿qué ocurre detrás de la escena?
- 28. ¿Qué ocurre con "Microsoft.Practices.EnterpriseLibrary.Caching" cuando intenta acceder a "CacheFactory.GetCacheManager();"?
- 29. ¿Qué sucede si un hilo se cuelga en un proceso?
- 30. Cuando se crea una matriz mediante una subexpresión, ¿qué ocurre con los temporales en ella?
¿Puede ser más específico? Me parece que la documentación habla muy bien de ello: http://java.sun.com/javase/6/docs/api/java/lang/Thread.html # interrupt() Supongo que hay algo que no está dejando en claro, sin embargo, si puede refinar su pregunta? –