Arrête une tâche périodique depuis la tâche elle-même en cours d'exécution dans un ScheduledExecutorService

Est-il un bon moyen pour arrêter la répétition de la tâche à partir de l'intérieur de la tâche elle-même lors de l'exécution dans un ScheduledExecutorService?

Permet de dire, j'ai la tâche suivante:

Future<?> f = scheduledExecutor.scheduleAtFixedRate(new Runnable() {
    int count = 0;
    public void run() {
       System.out.println(count++);
       if (count == 10) {
           //??? cancel self
       }
    }
}, 1, 1, TimeUnit.SECONDS);

De l'extérieur, il est facile d'annuler par f.annuler(), mais comment puis-je arrêter la répétition à l'endroit spécifié? (En passant de l'Avenir par le biais d'un AtomicReference n'est pas sûr, car il y a un potentiel fenêtre lorsque la scheduleAtFixedRate retourne f en retard et la variable est définie en retard, et que la tâche elle-même peut déjà, en voyant une valeur null dans la référence.)

source d'informationauteur akarnokd