2014-01-29 3 views
3

У меня есть приложение на стороне сервера, где клиенты могут запросить перезагрузку конфигурации. Если клиент запрашивает перезагрузку конфигурации, это не должно выполняться немедленно, но с задержкой в ​​1 минуту. Если другой клиент также просит перезагрузить конфигурацию в одну минуту, этот запрос следует игнорировать.ScheduledExecutorService - проверить, завершена ли запланированная задача.

Моя идея заключается в том, чтобы запланировать задачу с ScheduledExecutorService как:

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); 
service.schedule(new LoadConfigurationTask(), 1, TimeUnit.MINUTES); 

public class LoadConfigurationTask Runnable { 
    public void run() { 
     // LoadConfiguration 
    } 
} 

Как я могу проверить, если LoadConfigurationTask было запланировано, но еще не выполнена, чтобы иметь возможность игнорировать дальнейшие запросы, пока конфигурация не будет перезагружен?

+0

Что делать, если перезагрузка задачи конфигурации запущена - следует ли также игнорировать другой запрос? Что делать, если задача завершена 1 миллисекунда назад? –

+0

Нет, если он запущен, новая задача должна быть запланирована. – markus

ответ

3

Самый простой способ просто установить AtomicBooleanhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html

Установите его в верно, когда вы запускаете задачу, установите его в ложное, когда заканчивается задача, не запускать больше, если это не на ложь.

Убедитесь, что в блоке finally вы установите значение false, чтобы случайно не выйти из него, не отключая его.

25

Вы можете просто получить ссылку на ScheduledFuture, как это:

ScheduledFuture<?> schedFuture = service.schedule(new LoadConfigurationTask(), 1, TimeUnit.MINUTES); 

Теперь с будущим, вы можете проверить, если задача выполнена:

schedFuture.isDone(); 

Или еще лучше, проверить, как много времени, оставшегося до начала выполнения:

schedFuture.getDelay(TimeUnit.MINUTES); 

Нет необходимости в внешних вариациях e для отслеживания состояния.

+3

Это должен быть принятый ответ. – UniversE

Смежные вопросы