Java.util.Timer sınıfında zamanlanan görev nasıl durdurulur


92

Ben kullanıyorum java.util.Timersınıf ve bazı görevi gerçekleştirmek için zamanlama yöntemini kullanıyorum, ama 6 kez çalıştırdıktan sonra onun ben görevini durdurmak zorunda.

Bunu nasıl yapmalıyım?

Yanıtlar:


141

Bir yerde zamanlayıcıya bir referans verin ve şunu kullanın:

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

ne yapıyorsa onu durdurmak için. Bu kodu, yaptığınız görevin içine static int, kaç kez dolaştığınızı saymak için bir ile yerleştirebilirsiniz, örneğin

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

     ... perform task here ....

}

10
Bence iptal etmek yeterli, tasfiye edilmesine gerek yok
LiangWang

1
(Effetive Java book)
Tushar Pandey

1
@Jacky her ikisine de sahip olmak iyi bir uygulamadır, ancak teorik olarak cancelkendisi işe yarar .
Fritz H

10
@Jacky haklı. Timer uygulamasına bakın. İptal ettikten sonra tasfiye çağırmak kesinlikle gereksizdir. İptal, tüm görev listesini temizlerken, temizleme aynı liste üzerinde yinelenir, durumun İPTAL EDİLDİ olup olmadığını kontrol eder ve ardından görevleri kaldırır.
Boyan

2
Zamanlayıcıyı başlatan etkinlik / parça yok edilirse veya durdurulursa, Zamanlayıcı kendi kendine durur mu?
2019, 06:29


28

Zamanlayıcıda planladığınız görevi durdurmalısınız: Zamanlayıcınız:

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

Durdurmak için:

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

Sadece zamanlayıcıyı iptal etmenin devam eden zaman görevlerini sonlandırmayacağına dikkat edin.


İki yöntemim var TimerTask'ı farklı yöntemlerden durdurmak mümkün müdür?
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

Zamanlayıcıyı uyandıktan sonra milisaniye cinsinden belirli bir zamanda sonlandırın.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.