【问题标题】:Schedule a periodic task dependent on result of previous run根据先前运行的结果安排定期任务
【发布时间】:2013-02-11 21:37:45
【问题描述】:

我需要每隔X 秒执行一次任务。
我知道我可以使用TimerTaskScheduledThreadPool,但我的问题是这个任务取决于状态。
IE。任务在运行B 中会做什么取决于运行A 的结果。
编写此代码的最佳方法是什么?
也许做一个

while(true){  
  //do stuff  
  Thread.sleep(5000);  
}  

我能做到最好吗?

【问题讨论】:

    标签: java multithreading concurrency scheduled-tasks


    【解决方案1】:

    只需在 TimerTask 实现中定义您的状态,然后使用Timer

    TimerTask task = new TimerTask ()
    {
        private int state = 0;
    
        @Override
        public void run ()
        {
            System.out.println ("State is: " + state);
            state += 1;
        }
    };
    
    new Timer ().schedule (task, 0L, 1000L);
    

    这将永远每秒(每 1000L 毫秒)运行一次任务。

    【讨论】:

    • 我需要每隔 X 秒“永远”运行一次
    • 所以它只是一直调用run?它不会重新创建runnable?
    • @Jim 在我的示例中,runTimerTask 的同一实例上永远每秒被调用一次。跑过去看看。
    【解决方案2】:

    我认为您可以将TimerTimerTask 一起使用:

    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            // Some task
        }
    };
    timer.schedule(task, 10000, 10000);
    

    10s 的初始第一次延迟之后开始,每个10s 运行task

    根据Timer.schedule的文档,这个方法

    安排指定任务重复固定延迟执行, 在指定的延迟后开始。随后的处决发生 以大约固定的时间间隔间隔指定的时间段。

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多