RSS

Planificar tareas en Java

14 Abr

En algunas ocasiones nos vemos en la necesidad de que nuestras aplicaciones lancen alguna tarea en segundo plano para llevar a cabo algún procedimiento, generar algún informe, recolectar nuevas alertas, … este tipo de cosas. En este caso lo mejor es lanzarlas en segundo plano y no en el hilo principal. Para esto, Java nos ofrece tres posibilidades diferentes que vamos a ver a continuación a modo de chuleta de fácil y rápido acceso.

La primera de las formas es usando un simple hilo. Crearíamos el hilo con la tareas, lo lanzaríamos indefinidamente y le asignaríamos un intervalo de espera. Esto quedaría algo así:

public class Example1 {
    public static void main(String[] args) {
        final long interval = 2000; // Each 2 seconds
        Runnable runnable = new Runnable() {
            public void run() {
                while (true) {
                    System.out.println("I am here!!!");
                    try {
                        Thread.sleep(interval);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        Thread thread = new Thread(runnable);
        thread.start();
    }
}

Como podéis ver es bastante simple. Basta con crear el objeto Runnable, crear el comportamiento que deseamos y lanzarlo. No tenemos mucho control sobre cuando empezar o parar el hilo y el proceso se lanzará de forma inmediata, pero el objetivo era ser simple.

El siguiente ejemplo que vamos a ver cubre las necesidades que no nos ofrece la solución anterior, que en definitiva son, tener un poco más de control sobre muestro proceso. Para ello vamos a utilizar las clases Timer y TimerTask. Además, la instancia de Timer es thread-safe.

public class Example2 {
    public static void main(Strings[] args) {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("I am here!!!");
            }
        };

        Timer timer = new Timer();
        long delay = 0;
        long interval = 2000;

        timer.scheduleAtFixedRate(task, delay, interval);
    }
}

Como se puede ver en este ejemplo, aunque un poquito más complejo, nos ofrece la posibilidad de definir más parámetros para nuestra tarea.

El tercer y último método que vamos a ver, nos permite aún más flexibilidad de la que ya teníamos en el caso anterior. Las clases que nos permiten la implementación de esta última fueron añadidas en Java SE 5.

public class Example3 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            public void run() {
                system.out.println("I am here!!!");
            }
        };

        ScheduledExecutorService ses = Executors.
                newSingleThreadScheduledExecutor(runnable, 0, 1, TimeUnit.SECONDS);
    }
}

Este como vemos es en el que menos código escribimos, el más configurable a la hora de lanzar nuestro proceso y, además, aunque aquí no lo hemos usado, nos ofrece la posibilidad de tener un Pool de hilos para las ejecuciones.

Bueno, hasta aquí todo por hoy. Nos vemos.

Nota: Basado en el post How to Schedule a task to run in an interval.

Anuncios
 
2 comentarios

Publicado por en 14 abril, 2014 en programación

 

2 Respuestas a “Planificar tareas en Java

  1. David

    22 enero, 2016 at 7:01 am

    buenas , mi problema es q necesito q el poceso este funcionando en el servidor y a una hora determinada del dia haga cierta operacion como controlar fechas

     
    • fjavierm

      22 enero, 2016 at 7:37 pm

      Puedes programártelo tu mismo creando un hilo que chequee la hora, aunque esto es muy rudimentario.

      Pueden crear un programa y ejecutarlo con “cron” cuando necesites.

      Si estas en un servidor de aplicaciones Java (soporte Java EE) puedes darle un vistazo a @Schedule.

      Si necesitas algo más complejo y open source puedes echarle un vistazo a:
      https://quartz-scheduler.org

       

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: