如何每隔5秒/30秒/1分钟/3分钟/5分钟/10分钟/30分钟执行一段代码

陌上花开
  • 77

如何每隔5秒/30秒/1分钟/3分钟/5分钟/10分钟/30分钟执行一段代码
怎么来控制频率?

回复
阅读 4.6k
6 个回答

这种称之为定时器,基本上成熟的编程语言都有现成的框架可以使用。

比如java的Timer、quartz、Spring Schedule等。

定时任务就可以了

思路的话,参考linux的定时器

一般的话是定时任务,或者可以用延时队列来做。延时队列算法可以用时间轮算法,或者直接用第三方的redis或者消息队列来实现延时队列

定时器的框架实现很多,我一般用spring本身自带的Scheduled,看你的意思是想要一个具体的例子,给提供一个demo。下面demo演示了3种定时策略。

@Component
public class TestSchedule {

    @Scheduled(fixedDelay = 5000)  /** 上一个任务执行完成之后,间隔5秒执行下一个任务 */
//
//    @Scheduled(cron = "0/5 * * * * ? ") /** 单线程 没隔5秒检查一下是否有任务线程在执行,没有才调度下一个任务执行*/
//
//    @Scheduled(fixedRate = 5000) /** 很有原则,计划5秒一个任务,如果前面的任务超时了,那么下一个任务会在上一个任务结束前
//                                     立刻执行去追上计划的5秒周期,如果追不上,后续任务继续在上一个立刻完立刻执行去追上计划。
//                                     假如上一个任务5秒内提前完成任务,那么下一个任务会等待,直到5秒计划周期到了才执行*/
    public void printDate(){
        System.out.println("当前时间--"+ LocalDateTime.now());
    }
}

平日里面用惯了quartz,不知道这个可以不,我用c#实现`
///时间的函数
public int a(int i)
{

return i == 1 ? 1000 : i == 2 ? 5000 : 60000;

}
Task task = Task.Run(() =>
{

int i = 0;
while (true)
{
    Thread.Sleep(a(i++));
    //dosomething();
}

});

`

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏