【问题标题】:Java: Running task at different intervalsJava:以不同的时间间隔运行任务
【发布时间】:2015-08-01 07:29:37
【问题描述】:

我想定期运行相同的任务,但间隔不同。 例如for (1s, 2s, 3s) 方法应该在 1s, 3s, 6s, 7s 等之后调用。

通常我使用scheduleAtFixedRate,但通话之间的时间相同。谢谢!

【问题讨论】:

  • 任务是否在 1 秒内完成?
  • 您是否考虑过任务需要超过一秒的情况,您是否希望在这种情况下启动下一个任务或等待前一个任务完成
  • 它认为 1s 秒对我来说已经足够了 :)

标签: java scheduled-tasks timertask


【解决方案1】:

您可以以 1 秒的速度安排任务执行,并使任务本身跳过不需要的时间

【讨论】:

  • 似乎是最简单的解决方案,没有其他任何依赖项:)
【解决方案2】:

你可以用Quartz with cron expressions点赞

1,3,6,7,... * * * * * *

以特定的时间间隔安排执行,在本例中为每分钟、每小时、每天、每年的第 1、3、6 和 7 秒。

干杯

【讨论】:

    【解决方案3】:

    如果您的日程安排可以定义为cron expression,那么您可以尝试使用quartz scheduler。显然,这可能意味着添加一个您还没有的依赖项,但它是一个成熟且使用良好的库,它专门设计用于基于比简单周期性更复杂的计划执行任务。

    【讨论】:

      【解决方案4】:

      最好的方法是使用 Quartz。 但是,如果您不想引入任何依赖项,则可以使用执行程序。它比定时器任务更新更好。 检查这个例子

      import java.util.concurrent.Executors;
      import java.util.concurrent.ScheduledExecutorService;
      import java.util.concurrent.TimeUnit;
      
      public class Task implements Runnable
      {       
          private int delay = 0;
      
          public Task(int delay) 
          {
              this.delay = delay;
          }
      
          public void registerNextExecution()
          {
              ScheduledExecutorService scheduledThreadPool = Executors.newSingleThreadScheduledExecutor();
              scheduledThreadPool.schedule(this, ++delay, TimeUnit.SECONDS);
          }
      
          @Override
          public void run() 
          {
              System.out.println("Execution at " + new Date());
              registerNextExecution();
          }
      }
      

      我还没有测试过,但我相信这是一个很好的起点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2021-11-07
        • 2019-01-07
        • 1970-01-01
        相关资源
        最近更新 更多