Búsqueda de sitios web

Ejemplo de TimerTask de Java Timer


Java java.util.Timer es una clase de utilidad que se puede usar para programar un subproceso para que se ejecute en un momento determinado en el futuro. La clase Java Timer se puede utilizar para programar una tarea para que se ejecute una sola vez o se ejecute a intervalos regulares.

Java TimerTask

java.util.TimerTask es una clase abstracta que implementa la interfaz Runnable y necesitamos extender esta clase para crear nuestra propia TimerTask que se puede programar usando la clase java Timer.

Ejemplo de temporizador de Java

package com.journaldev.threads;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyTimerTask extends TimerTask {

    @Override
    public void run() {
        System.out.println("Timer task started at:"+new Date());
        completeTask();
        System.out.println("Timer task finished at:"+new Date());
    }

    private void completeTask() {
        try {
            //assuming it takes 20 secs to complete the task
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String args[]){
        TimerTask timerTask = new MyTimerTask();
        //running timer task as daemon thread
        Timer timer = new Timer(true);
        timer.scheduleAtFixedRate(timerTask, 0, 10*1000);
        System.out.println("TimerTask started");
        //cancel after sometime
        try {
            Thread.sleep(120000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        timer.cancel();
        System.out.println("TimerTask cancelled");
        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

Tenga en cuenta que la ejecución de un subproceso tardará 20 segundos, pero el objeto Java Timer está programado para ejecutar la tarea cada 10 segundos. Aquí está la salida del programa:

TimerTask started
Timer task started at:Wed Dec 26 19:16:39 PST 2012
Timer task finished at:Wed Dec 26 19:16:59 PST 2012
Timer task started at:Wed Dec 26 19:16:59 PST 2012
Timer task finished at:Wed Dec 26 19:17:19 PST 2012
Timer task started at:Wed Dec 26 19:17:19 PST 2012
Timer task finished at:Wed Dec 26 19:17:39 PST 2012
Timer task started at:Wed Dec 26 19:17:39 PST 2012
Timer task finished at:Wed Dec 26 19:17:59 PST 2012
Timer task started at:Wed Dec 26 19:17:59 PST 2012
Timer task finished at:Wed Dec 26 19:18:19 PST 2012
Timer task started at:Wed Dec 26 19:18:19 PST 2012
TimerTask cancelled
Timer task finished at:Wed Dec 26 19:18:39 PST 2012

La salida confirma que si una tarea ya se está ejecutando, Timer esperará a que finalice y, una vez finalizada, comenzará de nuevo la siguiente tarea de la cola. El objeto Java Timer se puede crear para ejecutar las tareas asociadas como un subproceso de daemon. El método del temporizador cancel() se utiliza para finalizar el temporizador y descartar cualquier tarea programada; sin embargo, no interfiere con la tarea que se está ejecutando actualmente y deja que finalice. Si el temporizador se ejecuta como subproceso daemon, ya sea que lo cancelemos o no, finalizará tan pronto como todos los subprocesos de usuario terminen de ejecutarse. La clase de temporizador contiene varios métodos de programación() para programar una tarea para que se ejecute una vez en una fecha determinada o después de algún retraso. Hay varios métodos scheduleAtFixedRate() para ejecutar una tarea periódicamente con cierto intervalo. Al programar tareas con el temporizador, debe asegurarse de que el intervalo de tiempo sea mayor que la ejecución normal del subproceso; de lo contrario, el tamaño de la cola de tareas seguirá creciendo y, finalmente, la tarea se ejecutará siempre. Eso es todo para un resumen rápido de Java Timer y Java TimerTask.

Artículos relacionados: