Iniciar un Thread cuando inicie mi webapp Java

Java Hilo

Hola, hace unos meses necesitaba hacer que un hilo arrancara junto con mi webapp, la aplicacion esta hecha con servlets y de servidor estabamos utilizando tomcat, asi que me puse a investigar como se podria hacer para arrancar el hilo, cuando iniciara la aplicacion, lo que encontre fue que ocupaba era crear un Listener en mi aplicacion e implementar una interface que se llama ServletContextListener, para que al iniciar la aplicacion se ejecute esa clase.

Todo iba bien pero el hilo aun despues de detener el servidor o undeployar la aplicacion seguia corriendo, por lo cual algo andaba mal y se tuvo que reimplementar el codigo, encontre como hacerle para detener bien el Thread y ahora ya funciona como deberia de funcionar.

Ya para no hacer el cuento mas largo aqui os dejo los pasos que tienen que seguir:

  • Crear una clase que extienda de Thread
  • Crear en esa clase una variable privada de tipo boolean y crear un metodo set para esa variable
  • En el metodo run hacer el while con esa variable
  • Cuando quieras detener definitivamente el hilo utilizas el metodo set de la variable y le asginas false y listo.

[cc lang=”JAVA”]
public class Hilo extends Thread{
private boolean corriendo = true;

public void setCorriendo(boolean corriendo){
this.corriendo = corriendo;
}

public void run(){

while(corriendo){
//.. hacer algo

Thread.sleep(10000); //hacerlo cada 10 segundos 😛
}
}

}

[/cc]

Ahi tenemos nuestro hilo que se iniciara cuando nuestra aplicacion web empiece pero para eso tienen que primero crear otra clase parecida a esta:

[cc lang=”java”]
public class miClaseIniciadora implements ServletContextListener {
private Hilo hilo;

//Este metodo se ejecuta cuando se destruye el contexo, o cuando undeployas la aplicacion.
public void contextDestroyed(ServletContextEvent sce) {
this.hilo.setCorriendo(false);
}

//este metodo se ejecuta cuando se inicia la aplicacion o bien el contexto.
public void contextInitialized(ServletContextEvent sce) {
this.hilo = new Hilo();
hilo.start();
}

}

[/cc]

Y se preguntaran algunos por que el hilo se hace de esa manera, bueno es que en mi caso el hilo se quedaba colgado en memoria, y tambien utilizaba el metodo interrupt que por cierto ya esta despreciado(deprecated) o el metodo stop que tambien esta despreciado o el metodo suspend tambien deprecated, asi que la opcion mas sana es con una variable booleana que termine el ciclo infinito del hilo.

Ahora solo falta editar el archivo web.xml e indicarle que hay un listener y ya con eso queda listo para que el hilo empiece solito.

Agregamos la siguiente linea:

<listener> <listener-class>miClaseIniciadora </listener -class></listener>

Y listo ya deployas tu app y el hilo empezara.

NOTA: Menciono que utilizamos tomcat, pero ya probe con jboss y tambien funciona perfectamente.

Me dio flojera crear la app pero si alguien la quiere, me lo dejan en los comentarios o me envian un mail.

Artículos Relacionados

Comentarios

  1. Información Bitacoras.com…

    Valora en Bitacoras.com: Hola, hace unos meses necesitaba hacer que un hilo arrancara junto con mi webapp, la aplicacion esta hecha con servlets y de servidor estabamos utilizando tomcat, asi que me puse a investigar como se podria hacer para arranca…..