En Android se aplican las mismas reglas que en un entorno Java normal. En Java, los hilos no se matan, pero la detención de un hilo se realiza de forma cooperativa . Se le pide al hilo que termine y el hilo puede luego cerrarse con gracia.
A menudo volatile boolean
, se usa un campo que el hilo verifica periódicamente y termina cuando se establece en el valor correspondiente.
Yo no me utilizar una boolean
para comprobar si el hilo debe terminar . Si lo usa volatile
como un modificador de campo, esto funcionará de manera confiable, pero si su código se vuelve más complejo, ya que en su lugar usa otros métodos de bloqueo dentro del while
ciclo, podría suceder que su código no termine en absoluto o al menos demore más cuando podria querer.
Ciertos métodos de biblioteca de bloqueo admiten la interrupción.
Cada hilo ya tiene un estado de interrupción de bandera booleana y debe hacer uso de él. Se puede implementar así:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Código fuente tomado de Java Concurrency in Practice . Dado que el cancel()
método es público, puede permitir que otro hilo invoque este método como desee.
También hay un método estático mal nombrado interrupted
que borra el estado interrumpido del hilo actual.