Cómo detener la tarea programada en la clase Java.util.Timer


91

Estoy usando java.util.timerclase y estoy usando su método de programación para realizar alguna tarea, pero después de ejecutarla 6 veces tengo que detener su tarea.

¿Cómo debo hacer eso?

Respuestas:


141

Mantenga una referencia al temporizador en algún lugar y use:

timer.cancel();
timer.purge();

para detener lo que sea que esté haciendo. Puede poner este código dentro de la tarea que está realizando con un static intpara contar el número de veces que ha dado una vuelta, por ejemplo

private static int count = 0;
public static void run() {
     count++;
     if (count >= 6) {
         timer.cancel();
         timer.purge();
         return;
     }

     ... perform task here ....

}

10
Creo que cancelar es suficiente, no es necesario purgarlo
— LiangWang

1
¿Es bueno agregar timer.cancel () en la final de acuerdo con (Effetive Java book)
— Tushar Pandey

1
@Jacky es una buena práctica tener ambos, pero teóricamente cancelfuncionaría.
— Fritz H

10
@Jacky tiene razón. Mira la implementación de Timer. Llamar a purgar después de cancelar es absolutamente inútil. Cancelar borra toda la lista de tareas, mientras que la purga itera sobre la misma lista, verifica si el estado es CANCELADO y luego elimina las tareas.
— Boyan

2
Si la actividad / fragmento que inició el temporizador se destruye o se detiene, ¿el temporizador programado se detiene por sí solo?
— aLL


27

Debe detener la tarea que ha programado en el temporizador: Su temporizador:

Timer t = new Timer();
TimerTask tt = new TimerTask() {
    @Override
    public void run() {
        //do something
    };
}
t.schedule(tt,1000,1000);

Para detener:

tt.cancel();
t.cancel(); //In order to gracefully terminate the timer thread

Tenga en cuenta que simplemente cancelar el temporizador no terminará las tareas de tiempo en curso.


Tengo dos métodos. ¿Es posible detener TimerTask desde un método diferente?
— Sachin HR

16
timer.cancel();  //Terminates this timer,discarding any currently scheduled tasks.

timer.purge();   // Removes all cancelled tasks from this timer's task queue.

1

Termine el temporizador una vez después de despertarse a una hora específica en milisegundos.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.