2010-10-29 17 views
5

Her şeyi denedim. Java.util.Timer sınıfında zamanlanan görev hemen nasıl durdurulur

  1. böyle Timer planlamak:

    zamanlayıcı Bu seferki çok How to stop the task scheduled in Java.util.Timer class

    ben 2 yolla bu görevi diyoruz java.util.TimerTask

    uygulayan bir görev var. zamanlama (timerTask, 60 * 1000);

  2. bazen ben hemen başlamak o işi gerekiyor ve

    cancelCurrentWork()

    çalıştığını herhangi varsa timerTask iptal zorundadır; timer.schedule (timerTask, 0);

Bu uygulama, şu anki iş bitmiyor: (belgelerine diyor ki: bu çağrı oluştuğunda görev çalışıyorsa, görev tamamlanma çalışır, ancak yeniden aday asla)

Ama durdurmak için ona ihtiyacım var.

public static void cancelCurrentwork() { 
if (timerTask!= null) { 
    timerTask.cancel(); 
} 
} 

Bu uygulama, yalnızca zamanlayıcıyı iptal eder, ancak şu anda bitecek görevi gerçekleştirmeyi bırakır.

public static void cancelCurrentwork() { 
if (timer!= null) { 
    timer.cancel(); 
} 
} 

akım yürütülmesi TAKS STOP zamanlayıcı bir yolu Thread.kill() falan gibi bir şey var mı? Durdurmak için bu göreve ihtiyacım olduğunda, tüm verilerini kaybetmesini istiyorum.

cevap

5

Zamanlayıcının görevi izlerini durdurması için bir yol yoktur.

Çalışan görevlerde, çalışmaya devam edip etmemesi gerektiğini kontrol eden ayrı bir mekanizmaya sahip olmanız gerekir. Örneğin, görev sonlandırmak istediğinizde false olarak ayarladığınız bir AtomicBoolean keepRunning değişkenine sahip olabilirsiniz.

+0

Ve işin içindeki görevden nasıl durulur? Ben boolean ile kontrol edebilirdim, ama sonra hangi yöntemi çağırmalıyım? this.cancel()? – vale4674

+1

Ve diğer soru: ScheduledExecutorService gibi herhangi bir API ya da bu gibi bir DURDURMA görevini yapmanızı sağlar? – vale4674

+0

Hayır, sadece "run" yönteminden dönüyorsunuz. – aioobe

0

Zamanlayıcınız bir çeşit dosya/soket vb. Kullanıyorsa, bu nesneyi zamanlayıcıdan kapatabilir ve zamanlayıcı görevi bir istisna atar ve zamanlayıcıyı durdurmak için kullanabilirsiniz.

ancak genelde ayrı bir iş parçacığı/zamanlayıcıyı başarılı bir şekilde durdurmak için bir tür zehir hapına ihtiyacınız vardır.

+0

evet, ama işte bu. Bunu hemen durdurmanın bir yolu yok ve bunun nasıl mümkün olduğunu anlamıyorum. – vale4674

+0

her neyse aioobe'den bu öneriyi kullandım ve sürekli olarak bayrağımı kontrol edip "run" yönteminden dönüyorum. – vale4674