Проверка, работает ли периодическое ScheduledFuture сейчас - PullRequest
3 голосов
/ 27 января 2011

У меня есть периодическое задание, запланированное через Spring TaskScheduler.schedule(Runnable, Trigger).

Учитывая возвращенное ScheduledFuture, есть ли способ проверить, выполняется ли задание в текущий момент?

Ответы [ 2 ]

7 голосов
/ 30 января 2011

После небольшого тестирования

public static boolean isRunning(ScheduledFuture future) {
    return future.getDelay(TimeUnit.MILLISECONDS) <= 0;
}

работает как брелок.Кажется, задача перенесена только после завершения, поэтому getDelay() возвращает отрицательное значение.

2 голосов
/ 27 января 2011

Вы можете изменить свой Runnable следующим образом:

class Runner implements Runnable{
    public volatile boolean RUNNING = false;
        public void run(){

        RUNNING = true;
        try{
            // Your code
        } finally {
            RUNNING = false;
        }
    }
}

edit Мыслительные операции с boolean являются атомарными и не должны быть изменчивыми.

...