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

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

阅读 951
评论
    6 个回答

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

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

      定时任务就可以了

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

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

            • 62

            定时器的框架实现很多,我一般用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();
              }

              });

              `

                撰写回答

                登录后参与交流、获取后续更新提醒