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.
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
LikeLike
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
LikeLike