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?

om.
fonte

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

}
Fritz H
fonte
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
55

De qualquer chamada cancel()noTimer se isso é tudo que está fazendo, ou cancel()noTimerTask caso do próprio temporizador tem outras tarefas que você deseja continuar.

Jon Skeet
fonte
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.

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