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);