¿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

 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?

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 .. } 
  • Corrección multihilo: Utilización de bloqueo sincronizado
  • Cuando está fuera del hilo principal, ¿cómo puedo obtener algún código para ejecutarse en el hilo principal lo más rápido posible?
  • Objeto no bloqueado por subproceso antes de notificar () en onPostExecute
  • Bloques sincronizados android
  • Cómo pausar y no pausar el hilo en un juego?
  • runOnUiThread no se está ejecutando en AsyncTask
  • Cómo actualizar la vista de imagen inmediatamente
  • Manejadores, MessageQueue, Looper, ¿todos ellos se ejecutan en el hilo de interfaz de usuario?
  • RxJava No puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ()
  • Android: java.util.concurrent.ThreadPoolExecutor
  • Handler no entrega un mensaje o un Runnable al subproceso principal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.