¿Cómo detener un hilo?
Cuando un hilo está vivo, ¿cómo puedo detener el hilo? He dado como
if(thread.isAlive()){ thread.stop(); }
pero el método de parada es obsoleto y está lanzando una excepción
- Llamada desde una excepción de hilo incorrecto
- Precisión del sueño del hilo
- Modo de depuración de Android Eclipse - Temas
- Progressdialog lento para mostrar en Android
- Conjunto de subprocesos en Java
01-21 14:12:40.188: ERROR/global(535): Deprecated Thread methods are not supported. 01-21 14:12:40.188: ERROR/global(535): java.lang.UnsupportedOperationException 01-21 14:12:40.188: ERROR/global(535): at java.lang.VMThread.stop(VMThread.java:85) 01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1379) 01-21 14:12:40.188: ERROR/global(535): at java.lang.Thread.stop(Thread.java:1344)
¿Cómo podemos solucionar esto?
- Descargar el archivo hace que la interfaz de usuario gague
- Ejecutar el hilo de otro hilo
- Número de impacto del Servicio en la eficiencia de la aplicación
- Comunicación multihilo: ¿qué tan bueno es el uso de variables atómicas como AtomicInteger? ¿Por qué no hay AtomicFloat?
- ¿Los hilos añaden mucha sobrecarga a una aplicación?
- Android: AsyncTask OR normal Java threads con ExecutorService
- ¿Cuáles son las consecuencias si intentamos conectar un hilo nativo permanentemente a la DVM (JVM)?
- Espere un hilo antes de continuar en Android
En general, no detiene forzosamente los hilos porque es peligroso. Se establece un indicador que indica al subproceso en cuestión que salga de su bucle de subproceso en circunstancias controladas.
Su hilo de rosca mira algo a lo largo de estas líneas:
void run() { while (shouldContinue) { doThreadWorkUnit(); } }
Y en algún otro lugar que se establece la variable shouldContinue
y esperar a que el hilo para terminar:
... thread.shouldContinue = false; thread.join(); ...
(Todo esto es probable que no sea correcto Java, ya que no lo hago Java. Verlo como pseudo código y modificar para su idioma real / thread biblioteca / etc).
Esto es lo que la gente de Java tiene que decir acerca de por qué no llamar a thread.stop y qué hacer en su lugar.
http://download.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
La respuesta breve es: permite que la función de punto de entrada de hilo vuelva.
Mejor que tengas que usar este método de hilo, para detenerlo.
Thread.interrupt();
Para que también pueda guardar el estado del hilo.
En un no imploding de hilo de bucle, siempre se puede utilizar algo como esto al principio del código de hilo como:
void run() { if (!shouldContinue) { return 1; } .. then rest of the thread code .. }