Finalizar un Thread

Un thread finaliza cuando el método run() devuelve el control, por haber terminado lo que tenía que hacer (por ejemplo, un bucle for que se ejecuta un número determinado de veces) o por haberse dejado de cumplir una condición (por ejemplo, por un bucle while en el método run()). Es habitual poner las siguientes sentencias en el caso de Applets Runnables:

public class MyApplet extends Applet implements Runnable {
// se crea una referencia tipo Thread private Thread AppletThread;

// método start() del Applet
public void start() {
if(AppletThread == null){ // si no tiene un objeto Thread asociado
AppletThread = new Thread(this, «El propio Applet»);
AppletThread.start(); // se arranca el thread y llama a run()
}
}
// método stop() del Applet
public void stop() {
AppletThread = null; // iguala la referencia a null
}
// método run() por implementar Runnable
public void run() {
Thread myThread = Thread.currentThread();
while (myThread == AppletThread) { // hasta que se ejecute stop() de Thread
… // código a ejecutar
}
}
} // fin de la clase MyApplet

donde AppletThread es el thread que ejecuta el método run() MyApplet. Para finalizar el thread basta poner la referencia AppletThread a null. Esto se consigue en el ejemplo con el método stop() del applet (distinto del método stop() de la clase Thread, que no conviene utilizar).

Para saber si un thread está “vivo” o no, es útil el método isAlive() de la clase Thread, que devuelve true si el thread ha sido inicializado y no parado, y false si el thread es todavía nuevo (no ha sido inicializado) o ha finalizado.

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra