Executor : Action toutes les x secondes annulable : comment faire?
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:
Code:
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); |
Forcément, on ne peut pas faire future.cancel(), car il peut ne pas être initialisé.
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?