Como parar a tarefa agendada na classe Java.util.Timer


91

Estou usando java.util.timerclasse e estou usando seu método de programação para realizar alguma tarefa, mas depois de executá-la por 6 vezes, tenho que interromper sua tarefa.

Como devo fazer isso?

Respostas:


141

Mantenha uma referência ao cronômetro em algum lugar e use:

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

para parar o que quer que esteja fazendo. Você poderia colocar esse código dentro da tarefa que está executando com um static intpara contar o número de vezes que você fez isso, por exemplo

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

     ... perform task here ....

}

10
Acho que cancelar é o suficiente, não precisa de purga
LiangWang

1
é bom adicionar timer.cancel () no final de acordo com (livro Effetive Java)
Tushar Pandey

1
@Jacky é uma boa prática ter os dois, mas teoricamente cancelfuncionaria.
Fritz H

10
@Jacky está certo. Veja a implementação do Timer. Chamar purge após cancelar é absolutamente inútil. Cancelar apaga toda a lista de tarefas, enquanto a eliminação itera sobre a mesma lista, verifica se o status está CANCELADO e remove as tarefas.
Boyan

2
se a atividade / fragmento que iniciou o cronômetro for destruída ou interrompida, o cronômetro programado para por conta própria?
aLL de


27

Você deve interromper a tarefa que programou no cronômetro: Seu cronômetro:

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

Para parar:

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

Observe que apenas cancelar o cronômetro não encerrará os cronogramas em andamento.


Estou tendo dois métodos. É possível interromper TimerTask de um 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

Encerre o cronômetro uma vez após acordar em um horário específico em milissegundos.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.