我通过Spring TaskScheduler.schedule(Runnable, Trigger)
安排了定期任务。
如果返回ScheduledFuture
,有没有办法检查,如果任务正在当前运行?
答案 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
的思考操作是原子的,不需要是易变的。