“fixedRate”:从上一次执行开始等待 X millis,然后再开始下一次执行。如果当前执行超过“固定速率”间隔,则下一个执行将排队,这将创建一系列正在运行的任务,即将运行多个任务实例。
private static int i = 0;
@Scheduled(initialDelay=1000, fixedRate=1000)
public void testScheduling() throws InterruptedException {
System.out.println("Started : "+ ++i);
Thread.sleep(4000);
System.out.println("Finished : "+ i);
}
输出:
开始 : 1
完成 : 1 // 4 秒后
开始时间 : 2 // 立即无/o 等待 1 秒,如固定速率
指定完成: 2 // 4 秒
后依此类推
“fixedDelay”:从上一次执行结束等待 X millis,然后再开始下一次执行。无论当前执行花费多少时间,下一次执行都是在将“fixedDelay”间隔添加到当前执行的结束时间后开始的。它不会对下次执行进行排队。
private static int i = 0;
@Scheduled(initialDelay=1000, fixedDelay=1000)
public void testScheduling() throws InterruptedException {
System.out.println("Started : "+ ++i);
Thread.sleep(4000);
System.out.println("Finished : "+ i);
}
输出:
开始 : 1
完成 : 1 // 4 秒后 开始时间 : 2 // 等待 1 秒,如 fixedDelay 中指定: 2 // 4 秒后 开始时间: 3 // 1 秒
后依此类推