Как сообщить ScheduledExecutorService игнорировать перекрывающиеся выполнения после возобновления компьютера из приостановки/гибернации

У меня есть поток, отвечающий за периодическое обновление кеша ответов на запросы удаленных служб каждые 10-15 минут.

Проблема заключается в том, что когда клиентская машина выходит из спящего режима, задача обновления выполняет время ожидания/период обновления, а не только один раз.

Это не перегружает сервер или что-то в этом роде, но это неэффективно. Как я могу предотвратить это?


person NotGaeL    schedule 20.04.2015    source источник


Ответы (1)


Предположим, что задача запланирована с фиксированной скоростью через ScheduledExecutorService, измените задачу на самопланируемую задачу. Таким образом, всегда есть только одна задача, ожидающая выполнения.

person vanOekel    schedule 24.04.2015
comment
Я забыл об этом вопросе, но да; это то, что я в итоге сделал. Тем не менее, хорошо иметь какое-то подтверждение, потому что у меня не так много опыта в этом, и я беспокоился, что такое планирование может быть плохой практикой (что-то вроде: что, если есть ненормальное завершение, которое я не сделал? например, недостаточно ресурсов для выполнения потока обновления, и следующее обновление не запланировано?), и поэтому я подумал, что, возможно, стандартная практика была чем-то другим, чего я нигде не нашел, потому что у меня не было имя для него. - person NotGaeL; 25.04.2015