检查周期性ScheduledFuture是否正在运行

时间:2011-01-27 09:59:57

标签: java concurrency scheduling

我通过Spring TaskScheduler.schedule(Runnable, Trigger)安排了定期任务。

如果返回ScheduledFuture,有没有办法检查,如果任务正在当前运行?

2 个答案:

答案 0 :(得分:7)

经过一些测试后,

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

就像一个魅力。似乎任务仅在完成后重新安排,因此getDelay()返回负值。

答案 1 :(得分:2)

您可以像这样更改Runnable:

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

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

修改 使用boolean的思考操作是原子的,不需要是易变的。