He creado una clase HiloMejorado que facilita enormemente trabajar con este tipo de hilos.
Para usarlo, basta que nuestro hilo herede de HiloMejorado (public NuestraClase extends HiloMejorado) y solo hay que redefinir algunos métodos (si es que lo necesitamos):
- private void rutinaDeComienzo() : esta rutina se ejecuta justo antes de entrar al bucle maestro del hilo. Viene bien para hacer las incializaciones de variables temporales del programa
- private void rutinaDelBucle() : esta rutina se ejecuta de forma continua hasta que le ordenemos al hilo que se detenga.
- private void rutinaDeSalida() : esta rutina se ejecuta justo después de haber salido del bucle maestro.
- private void rutinaPreviaAParar(): cuando ordenemos al hilo que se detenga, ejecutará esta rutina antes de detener el hilo.
Para usar la clase que hereda de HiloMejorado, creamos el Thread y lo arrancamos con hilo.start(); . Para detener el hilo mejorado, hay que llamar al método hilo.paraElHilo();.
Os dejo aquí el código:
Código: Seleccionar todo
package client;
/*
* @author Apokalypse Studios
*
* HiloMejorado APK 1.0
*
* Esta clase permite trabajar con hilos de una forma más organizada y cómoda.
*
* Forma de uso:
* 1.-Programar las rutinas de entrada, bucle, salida y previa a parar
* 2.-Crear el objeto HiloMejorado
* 3.-Llamar al método .start() para iniciar el hilo
* 4.-Llamar al método .paraElHilo() para detener el hilo
*
*/
public class HiloMejorado extends Thread
{
private boolean continuar=true; // Variable que mantiene el hilo indefinidamente
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Esta rutina se ejecuta justo antes de entrar al bucle por primera vez
*/
private void rutinaDeComienzo()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Esta rutina va a ser la rutina que se repetirá indefinidamente mientras el hilo esté
* en ejecución.
*/
private void rutinaDelBucle()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Esta rutina se ejecuta justo en cuanto se solicita al hilo que se pare.
*/
private void rutinaPreviaAParar()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Esta rutina se ejecuta una vez ha salido del bucle principal.
*/
private void rutinaDeSalida()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Código fijo
*/
public void run()
{
rutinaDeComienzo();
while(continuar)
{
rutinaDelBucle();
}
rutinaDeSalida();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Constructor
*/
public HiloMejorado()
{
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Esta rutina detiene el hilo.
*/
public void paraElHilo()
{
rutinaPreviaAParar();
continuar=false;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
}