Znalazłem tutaj podobne pytania, ale nie znalazłem odpowiedzi w sposób satysfakcjonujący. Więc ponownie sformułuj pytanie
Mam zadanie, które należy wykonywać okresowo (powiedzmy w odstępach 1-minutowych). Jaka jest zaleta korzystania z funkcji Timertask i Timer, w przeciwieństwie do tworzenia nowego wątku, który ma nieskończoną pętlę ze snem?
Fragment kodu za pomocą timertask-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
Fragment kodu używający wątku i uśpienia
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
Naprawdę nie muszę się martwić, jeśli przegapię pewne cykle, jeśli wykonanie logiki zajmuje więcej niż czas interwału.
Proszę o komentarz na ten temat ...
Aktualizacja:
Ostatnio znalazłem kolejną różnicę między używaniem Timera a Thread.sleep (). Załóżmy, że aktualny czas systemowy to 11:00. Jeśli z jakiegoś powodu cofniemy czas systemowy do godziny 10:00, Timer ZATRZYMUJE wykonywanie zadania do godziny 11:00, podczas gdy metoda Thread.sleep () będzie kontynuować wykonywanie zadania bez przeszkód. Może to być główny decydent przy podejmowaniu decyzji, co użyć między tymi dwoma.