Есть ли хороший способ остановить повторение задачи из самой задачи при запуске в 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 (), но как я могу остановить повторение в указанном месте? (Передача Future через AtomicReference небезопасна, потому что существует потенциальное окно, когда scheduleAtFixedRate возвращает f late, а переменная также устанавливается поздно, а сама задача может уже выполняться, видя в ссылке null.)