API Docs Help

Scheduler

Le scheduler est une partie essentiel, il permet:

  • L'accès à des executors pour les CompletableFuture

  • Démarrer des tâches (synchrone ou asynchrone) avec des TimeUnit

Executors

Le scheduler contient les méthodes suivantes pour les executors:

Executor getMainThreadExecutor(); Executor getAsyncExecutor();

Ces deux méthodes peuvent être utilisés avec les completablefuture de la manière suivante:

PlatformScheduler scheduler = ...; CompletableFuture<Void> cf = new CompletableFuture<>(); cf.whenCompleteAsync((unused, throwable) -> { // ceci s'exécute sur le thread principal }, scheduler.getMainThreadExecutor()); cf.complete(null);

Tâches

Les tâches peuvent être lancés de différentes manière, chaque manière possède une version synchrone et asynchrone Ils retournent tous une PlatformTask

PlatformTask

Chaque méthode lancant une tâche retourne une PlatformTask, cette classe permet l'annulation de la tâche via:

void cancel();

Lancement simple d'une tâche

PlatformTask runTask(Runnable runnable); // ou bien PlatformTask runTaskAsync(Runnable runnable);

Exemple:

PlatformScheduler scheduler = ...; scheduler.runTask(() -> System.out.println("La tâche s'est exécutée (synchrone)")); scheduler.runTaskAsync(() -> System.out.println("La tâche s'est exécutée (asynchrone)"));

Lancement différée d'une tâche

PlatformTask runTaskLater(Runnable runnable, long delay, TimeUnit unit); // ou bien PlatformTask runTaskLaterAsync(Runnable runnable, long delay, TimeUnit unit);

unit est l'unité à utiliser pour interpréter delay, unités disponible: JavaDoc

Exemple:

PlatformScheduler scheduler = ...; long l = System.currentTimeMillis(); scheduler.runTaskLater(() -> { long diff = (System.currentTimeMillis() - l) / 1000; // secondes System.out.println("La tâche (sync) s'est exécutée après " + diff + "s"); }, 5, TimeUnit.SECONDS); scheduler.runTaskLaterAsync(() -> { long diff = (System.currentTimeMillis() - l) / 1000; // secondes System.out.println("La tâche (async) s'est exécutée après " + diff + "s"); }, 5, TimeUnit.SECONDS);

Lancement péroidique d'une tâche

PlatformTask runTaskTimer(Runnable runnable, long delay, long period, TimeUnit unit); // ou bien PlatformTask runTaskTimerAsync(Runnable runnable, long delay, long period, TimeUnit unit);

delay est le temps avant la première activation de la tâche
period est le temps avant chaque période

Exemple:

PlatformScheduler scheduler = ...; long l = System.currentTimeMillis(); scheduler.runTaskTimer(() -> { long diff = (System.currentTimeMillis() - l) / 1000; // secondes System.out.println("La tâche (sync) s'est exécutée après " + diff + "s"); }, 0, 5, TimeUnit.SECONDS); scheduler.runTaskTimerAsync(() -> { long diff = (System.currentTimeMillis() - l) / 1000; // secondes System.out.println("La tâche (async) s'est exécutée après " + diff + "s"); }, 0, 5, TimeUnit.SECONDS);

Lancement d'une tâche à un moment précis

Parfois, certaine tâche doivent être exécutées à un instant précis
Le scheduler offre donc cette possibilités et garanti même que l'exécution ne sera pas affectés par un lag serveur

PlatformTask runTaskAt(Runnable runnable, long time); // ou bien PlatformTask runTaskAtAsync(Runnable runnable, long time);

time est un temps en millisecondes à laquel la tâche doit s'exécuter Exemple:

PlatformScheduler scheduler = ...; long l = System.currentTimeMillis(); scheduler.runTaskAt(() -> { long diff = (System.currentTimeMillis() - l) / 1000; // secondes System.out.println("La tâche (sync) s'est exécutée après " + diff + "s"); }, l + 5000); scheduler.runTaskAtAsync(() -> { long diff = (System.currentTimeMillis() - l) / 1000; // secondes System.out.println("La tâche (async) s'est exécutée après " + diff + "s"); }, l + 5000);
Last modified: 17 septembre 2024