Znalazłem podobne pytania tutaj, ale nie było odpowiedzi na moje zadowolenie. Ponownie przeformułując pytanie -Timer i TimerTask kontra wątek + sen w Javie
Mam zadanie, które musi być wykonywane okresowo (powiedzmy co 1 minutę). Co jest zaletą Timertask & Timer, aby to zrobić w przeciwieństwie do tworzenia nowego wątku, który ma nieskończoną pętlę ze snem?
Fragment kodu przy użyciu timertask-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
fragment kodu za pomocą nici i Sleep and
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
I naprawdę nie trzeba się martwić, jeśli pominąć pewne cykle, jeśli wykonanie logiki trwa więcej niż interwał.
Proszę o komentarz w tej sprawie ..
Dzięki
-Keshav
Aktualizacja:
Ostatnio znalazłem inną różnicę pomiędzy użyciem timera kontra Thread.Sleep(). Załóżmy, że obecny czas systemowy to 11:00. Jeśli z jakiegoś powodu wycofamy czas systemowy do godziny 10:00, program Timer wykona polecenie STOP, dopóki nie osiągnie godziny 11:00, natomiast metoda Thread.sleep() będzie kontynuowała wykonywanie zadania bez przeszkód. Może to być głównym decydentem przy podejmowaniu decyzji, co stosować między tymi dwoma.
Punkt porządku: Timer i TimerTask są przestarzałe i zostały skutecznie zastąpione przez ExecutorService, chociaż twój punkt nadal jest ważny. – skaffman
Dzięki za podpowiedź, zdecydowałem się użyć ExecutorService :) – Keshav
Dziękuję wszystkim za odpowiedzi, na pewno dałem mi więcej zrozumienia! – Keshav