web-dev-qa-db-fra.com

Est-il possible de planifier une influence complète?

Y a-t-il un moyen de planifier la mise au point en Java? Ce que je voulais faire, c'est planifier une tâche à exécuter avec un certain retard, et la chaîne avec d'autres opérations à effectuer de manière asynchrone lorsqu'elle se termine. Jusqu'à présent, je n'ai trouvé aucun moyen de le faire.

Pour de bons tiers, nous avons par exemple ScheduledExecutetorservice, où nous pouvons planifier une tâche à exécuter avec un délai comme celui-ci:

ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
Future<String> future = scheduledExecutorService.schedule(() -> "someValue", 10, TimeUnit.SECONDS);

Y a-t-il des voies similaires pour complétables?

9
Łukasz Gruba

Si vous utilisez Java 9+, alors CompletableFuture#delayedExecutor(long,TimeUnit) Peut répondre à vos besoins:

Renvoie un nouvel exécuteur qui soumet une tâche à l'exécuteur exécutive par défaut après le délai donné (ou aucun délai en cas de non positif). Chaque retard commence lors de l'invocation de la méthode de execute de l'exécuteur renvoyée.

Executor delayed = CompletableFuture.delayedExecutor(10L, TimeUnit.SECONDS);
CompletableFuture.supplyAsync(() -> "someValue", delayed)
    .thenAccept(System.out::println)
    .join();

Il y a aussi ne surcharge où vous pouvez spécifier le Executor à utiliser à la place du "exécuteur par défaut".

3
Slaw