Hilos en Java

De ChuWiki
Saltar a: navegación, buscar

Contenido

Crear y arrancar el hilo

Para crear un hilo en java, primero debemos hacer una clase que implemente la interface Runnable

public class MiRunnable implements Runnable
{
    public void run ()
    {
         System.out.println ("Esto se ejecuta en otro hilo");
    }
}

Lo que esté en el método run() es lo que se ejecutará en un hilo separado.

Cuando queramos que empiece a ejecutarse, creamos una instancia de la clase Thread pasándole una instancia de MiRunnable y la arrancamos

MiRunnable miRunnable = new MiRunnable();
Thread hilo = new Thread (miRunnable);
hilo.start();  // Aquí empieza a ejecutarse el hilo


Dormir un hilo

Para dormir un hilo durante un cierto tiempo, basta con llamar al método sleep(). Puesto que este método lanza una excepción, debemos capturarla.

try
{
    Thread.sleep (1000);  // El tiempo en milisegundos
} 
catch (Exception e)
{
    // Tratamiento de la excepción
}


Terminar un hilo

Es bastante habitual hacer que un hilo se meta en un bucle infinito, realizando una tarea indefinidamente

public class MiRunnable implements Runnable
{
    public void run ()
    {
         while (true)
         {
            // Alguna tarea a realizar
         }
    }
}

Si queremos que este hilo termine y buscamos en la API de java, vemos que todos los métodos para detener hilos (Thread.destroy(), Thread.suspend(), etc) están obsoletos, desaconsejados, etc.

¿Cómo terminamos entonces el hilo?

La forma que habitualmente implemento, es poner una variable booleana que indica si el hilo debe terminarse y usarla en el while.

public class MiRunnable implements Runnable
{
    private boolean terminar = false;
    public void setTerminar (boolean terminar)
    {
        this.terminar=terminar;
    }
    public void run ()
    {
         while (!terminar)
         {
            // Alguna tarea a realizar
         }
    }
}

De esta forma, para terminar el hilo de forma segura, bastará con llamar al método setTerminar()

MiRunnable miRunnable = new MiRunnable();
Thread hilo = new Thread (miRunnable);
hilo.start();  // Aquí empieza a ejecutarse el hilo
...
miRunnable.setTerminar(true); // Aquí terminamos el hilo

Enlaces