Есть ли хороший способ остановить повторение задачи из самой задачи при запуске в ScheduledExecutorService?
Скажем, у меня есть следующая задача:
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);
Извне, это легко отменить через f.cancel(), но как я могу остановить повторение в указанном месте? (Прохождение Будущее через AtomicReference небезопасно, потому что есть потенциальное окно, когда schedAtFixedRate возвращает f поздно, и переменная также установлена слишком поздно, и сама задача может уже выполняться, видя нуль в ссылке.)