J'ai trouvé des questions similaires posées ici, mais je n'ai pas trouvé de réponses satisfaisantes. Donc, en reformulant la question à nouveau-
J'ai une tâche qui doit être effectuée à intervalles réguliers (disons toutes les minutes). Quel est l'avantage d'utiliser Timertask et Timer pour faire cela, plutôt que de créer un nouveau thread qui a une boucle infinie avec sleep ?
Extraits de code utilisant timertask-
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
Extraits de code utilisant Thread et sleep-
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
Je n'ai vraiment pas à m'inquiéter de manquer certains cycles si l'exécution de la logique prend plus que le temps d'intervalle.
Veuillez commenter ce..
Mise à jour :
Récemment, j'ai découvert une autre différence entre l'utilisation de Timer et de Thread.sleep(). Supposons que l'heure actuelle du système est 11:00AM. Si, pour une raison quelconque, nous ramenons l'heure du système à 10h00, la minuterie cessera d'exécuter la tâche jusqu'à ce qu'elle atteigne 11h00, alors que la méthode Thread.sleep() continuera d'exécuter la tâche sans problème. Cela peut être un facteur de décision important pour choisir entre ces deux méthodes.
23 votes
Point d'ordre : Timer et TimerTask sont obsolètes, et ont été effectivement remplacés par ExecutorService, bien que votre remarque soit toujours valable.
0 votes
Merci pour le conseil, j'ai décidé d'utiliser ExecutorService :)
0 votes
Merci à tous pour les réponses, cela m'a permis de mieux comprendre !
7 votes
Timer n'est pas obsolète, et est préféré lorsqu'un seul thread est nécessaire. ( java.sun.com/javase/6/docs/api/java/util/Timer.html )
2 votes
Timer et TimerTask sont toujours utiles dans les environnements JME où l'ExecutorService n'existe pas (depuis JME basé sur Java 1.3...).