Ho trovato domande simili poste qui ma non c'erano risposte di mia soddisfazione. Quindi riformulare di nuovo la domanda-
Ho un compito che deve essere svolto periodicamente (ad esempio intervalli di 1 minuto). Qual è il vantaggio di utilizzare Timertask & Timer per fare questo rispetto alla creazione di un nuovo thread che ha un ciclo infinito con sleep?
Snippet di codice utilizzando timertask-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
Snippet di codice utilizzando Thread e sleep-
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
Non devo davvero preoccuparmi se perdo determinati cicli se l'esecuzione della logica richiede più dell'intervallo.
Si prega di commentare questo ..
Aggiornamento: di
recente ho trovato un'altra differenza tra l'utilizzo di Timer e Thread.sleep (). Supponiamo che l'ora di sistema corrente sia le 11:00. Se per qualche motivo eseguiamo il rollback dell'ora di sistema alle 10:00 AM, il timer INTERROMPERÀ l'esecuzione dell'attività finché non avrà raggiunto le 11:00, mentre il metodo Thread.sleep () continuerà a eseguire l'attività senza ostacoli. Questo può essere un importante decisore nel decidere cosa usare tra questi due.