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?

om.
fuente

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

}
Fritz H
fuente
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.

Vering
fuente
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.
Abhi
fuente
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);
Ajay Kumar
fuente