Salut,
Je rencontre un problème auquel je ne trouve pas de solution propre.
Je souhaite exécuter une action toutes les x secondes. Cette action consiste à tester une condition, et si elle est fausse (ou vraie, ça dépend si on prend la négation), alors il faut arrêter d'exécuter l'action toutes les x secondes.
Voici l'exemple, mais qui évidemment ne marche pas:
Forcément, on ne peut pas faire future.cancel(), car il peut ne pas être initialisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); final ScheduledFuture<?> future = executor.submit(new Runnable() { @Override public void run() { boolean condition = false; //remplacer par la condition if (condition) { future.cancel(false); } else { //code } } }, 10, 10, TimeUnit.SECONDS);
Le problème, c'est que pour s'annuler, l'action doit connaître le future qui est renvoyé lorsqu'on met le runnable en paramètre de submit (en gros il y a un cycle de causalité).
Avez-vous une solution?
Partager