Si je souhaite planifier une tâche récurrente alignée sur une date spécifique, il est logique d'utiliser ScheduledExecutorService
. Mais il n'a aucune méthode à passer dans le délai suivant firstRunDate + à une méthode scheduleAtFixedRate
. Je sais que je peux annuler moi-même le retard initial, mais y a-t-il une raison pour que cela ne soit pas fourni par l'API? D'autant plus que le SES est implémenté en interne en utilisant triggerTimes (qui est ce que je veux transmettre).Pourquoi ScheduledExecutorService n'expose pas les méthodes à s'exécuter à un moment donné
Répondre
Basé sur la documentation:
Toutes les méthodes de planification acceptent des retards relatifs et des périodes comme arguments, non ou dates absolues fois. Il est simple de transformer un temps absolu représenté par une date en le formulaire requis. Par exemple, pour planifier à une certaine date future, vous pouvez utiliser: schedule (tâche, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS). Attention cependant que l'expiration d'un délai relatif ne coïncide pas nécessairement avec la Date actuelle à laquelle la tâche est activée en raison des protocoles de synchronisation de l'heure du réseau, de la dérive de l'horloge ou d'autres facteurs.
Il semble que ce soit une décision judicieuse. Il est largement connu que la classe Date a ses problèmes. Par exemple, public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
de TimeTask ne tient pas compte du temps d'économie de la lumière du jour.
java.util.Timer
offre cela avec TimerTask
car il a une méthode
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
mais vous perdez la mise en commun de fil et Future
soutien de ExecutorService
. Editer: Pour répondre à votre question initiale, je suppose que l'auteur n'a pas eu l'idée de surcharger la méthode avec une date.