2016-08-09 40 views
7

我正在执行使用弹簧的计划任务,我看到有2个类型的配置时间,计划再次从最新的作品。这两个配置之间有什么不同。时间表中的固定费率和固定延迟有什么区别?

@Scheduled(fixedDelay = 5000) 
    public void doJobDelay() { 
     // do anything 
    } 
    @Scheduled(fixedRate = 5000) 
    public void doJobRate() { 
     // do anything 
    } 

回答

12
  • 固定利率:让春天的定期运行任务,即使 一次调用可能仍在运行。
  • fixedDelay:专门控制上次执行完成时的下一个执行时间。

    @Scheduled(FIXEDDELAY = 5000) 公共无效updateEmployeeInventory(){ 的System.out.println( “员工库存将被更新一次,只有最后一次更新完成”); /** * 添加您的计划作业的逻辑在这里 * /}

    @Scheduled(固定利率= 5000) 公共无效updateEmployeeInventory(){ 的System.out.println(“员工库存将被更新无论是否已完成,每隔5秒钟更新一次已经注视“); /** * 这里添加* / 安排的作业逻辑}

+1

在每个方法中我使用** Thread.sleep(5000)**来等待5s,但是我不知道看看有什么不同 – Adam

+0

完全一样,我相信@ nikhil7610解释正确 – ottercoder

0

固定延迟:特别控制下一执行时间,当最后执行完毕。

固定比率:即使最后一次调用仍在运行,Spring也会定期运行该任务。

2

“fixedRate”:在开始下一次执行之前,从上次执行的开始等待X毫秒。如果当前执行超过'fixedRate'时间间隔,则下一个执行将排队,但只有下一个执行。它不会产生一系列排队执行

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 //立即W/O等待1秒中规定固定速率
表面处理:2 // 4秒后

“FIXEDDELAY”:等待来自先前执行的结束X米利斯开始下一次执行之前。无论当前执行的时间多少,下一次执行都是在添加“fixedDelay”间隔以结束当前执行时间之后开始的。它不会排队下一次执行。

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秒后
发起者:1秒2个//等待如FIXEDDELAY指定
表面处理:2 4秒后
// 发起者:3 // 1秒后

4

固定利率:它是用来在运行每n磨作业方法iseconds。这项工作是否已经完成了之前的任务并不重要。

fixedDelay:它用于按任务之间等待时间给定n毫秒的顺序运行作业方法。

当使用“固定利率”:如果没有预料到超过内存的大小和线程池 固定利率是合适的。如果传入的任务不完成快速,它可能最终与“内存异常”

当使用“FIXEDDELAY”: 如果每一个运行的任务是彼此相关,他们需要等待在前一个结束之前,fixedRate是合适的。如果fixedDelay时间是仔细设置的,它也会让正在运行的线程有足够的时间在新任务开始前完成工作

相关问题