Normalmente un programa en java con mas de un hilo de ejecución terminará hasta que todos sus hilos hayan terminado o también podría terminar si alguno de sus hilos hace una llamada al método System.exit().
Algunas veces es necesario terminar un hilo ya sea para terminar el programa o para permitir al usuario cancelar las actividades que un hilo en particular está haciendo.
Java proporciona un mecanismo de interrupción para indicarle al un hilo que termine su ejecución.
No es tan sencillo ya que el hilo por si mismo debe tener un mecanismo para estar verificando constantemente si ha sido interrumpido ó no y tomar una decisión por sí mismo sobre qué hacer en caso de que se haya llamado al método interrupt().
El ejemplo a continuación crea un objeto Thread y después de pasados 10 segundos forza su finalización utilizando el mecanismo de interrupción.
Realice los siguientes pasos para implementar el ejemplo:
1.- Cree una clase llamada NumerosPrimos que extienda de la clase Thread.
public class NumerosPrimos extends Thread{
2.- Sobreescriba el metodo run() creando un ciclo infinito que procese números consecutivos comenzando con el 1 y determine cuales de ellos son primos.
@Override
public void run() {
long n=1L;
while (true) {
if (esPrimo(n)) {
System.out.printf("numero %d es Primo \n",n);
}
3. Después de procesar un numero habrá que verificar si el hilo ha sido interrumpido mediante invocar al metodo isInterrupted(). Si el método regresa Verdadero, se manda a imprimir un mensaje y se termina la ejecucion del hilo.
if (isInterrupted())
{
System.out.printf("Se interrumpio el hilo");
return;
}
n++;
}
}
4. Implemente el método esPrimo() que regresará un valor booleano indicando si el numero que se recibió como parámetro es primo.
private boolean esPrimo(long num)
{
if (num <=2)
{
return true;
}
for (long i=2; i<num;i++)
{
if ((num % i)==0)
{
return false;
}
}
return true;
}
5.- Después de eso cree una clase que contenga un método main().
public class Main {
public static void main(String[] args) {
6. Cree un objeto de la clase NumerosPrimos e invoque al método start().
Thread hilo=new NumerosPrimos();
hilo.start();
7.Espere 3 segundos e interrumpa el hilo.
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
hilo.interrupt();
}
8. De ser necesario complete las llaves y Ejecute el ejemplo.