Java Language Planification de tâches à exécuter à une heure fixe, après un délai ou à plusieurs reprises


Exemple

La classe ScheduledExecutorService fournit une méthode permettant de planifier des tâches uniques ou répétées de plusieurs manières. L'exemple de code suivant suppose que le pool a été déclaré et initialisé comme suit:

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);

Outre les méthodes ExecutorService normales, l'API ScheduledExecutorService ajoute 4 méthodes qui planifient les tâches et renvoient ScheduledFuture objets ScheduledFuture . Ce dernier peut être utilisé pour récupérer des résultats (dans certains cas) et annuler des tâches.

Démarrer une tâche après un délai fixe

L'exemple suivant programme une tâche pour qu'elle démarre après dix minutes.

ScheduledFuture<Integer> future = pool.schedule(new Callable<>() {
        @Override public Integer call() {
            // do something
            return 42;
        }
    }, 
    10, TimeUnit.MINUTES);

Démarrer des tâches à un taux fixe

L'exemple suivant permet de planifier une tâche pour qu'elle démarre après dix minutes, puis de manière répétée à raison d'une fois par minute.

ScheduledFuture<?> future = pool.scheduleAtFixedRate(new Runnable() {
        @Override public void run() {
            // do something
        }
    }, 
    10, 1, TimeUnit.MINUTES);

L'exécution de la tâche se poursuivra en fonction de la planification jusqu'à ce que le pool soit fermé, que le future soit annulé ou que l'une des tâches rencontre une exception.

Il est garanti que les tâches planifiées par un appel scheduledAtFixedRate donné ne se chevaucheront pas dans le temps. Si une tâche prend plus de temps que la période prescrite, les exécutions de tâches suivantes et suivantes peuvent commencer tard.

Démarrer des tâches avec un délai fixe

L'exemple suivant permet de planifier une tâche pour qu'elle démarre après dix minutes, puis plusieurs fois avec un délai d'une minute entre la fin d'une tâche et la suivante.

ScheduledFuture<?> future = pool.scheduleWithFixedDelay(new Runnable() {
        @Override public void run() {
            // do something
        }
    }, 
    10, 1, TimeUnit.MINUTES);

L'exécution de la tâche se poursuivra en fonction de la planification jusqu'à ce que le pool soit fermé, que le future soit annulé ou que l'une des tâches rencontre une exception.