【问题标题】:How to let Timer skip through the task when last one haven't finished?当最后一个尚未完成时,如何让 Timer 跳过任务?
【发布时间】:2013-10-19 02:56:38
【问题描述】:

这里是sn-p的代码:

Timer t = new Timer();
TimerTask task = new TimerTask() {
    int i = 0;
    int longTimeJobPoint = 2;
    @Override
    public void run() {
        System.out.println(new Date());
        if(++i == longTimeJobPoint)    {
            try {
                System.out.println("sleeping time...");
                Thread.sleep(30000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

};

//every 10 sec
t.scheduleAtFixedRate(task, new Date(), 10000);

结果如下:

Sat Oct 19 10:44:59 CST 2013
Sat Oct 19 10:45:09 CST 2013
sleeping time...
Sat Oct 19 10:45:39 CST 2013  //piled task
Sat Oct 19 10:45:39 CST 2013  //piled task
Sat Oct 19 10:45:39 CST 2013
Sat Oct 19 10:45:49 CST 2013

如我们所见,当Thread.sleep() 延迟 30 秒时,计划的计时器堆积应该每 10 秒调用一次的任务。我想要的是跳过因为最后一个任务还没有完成而延迟的任务。输出应该是这样的:

Sat Oct 19 10:44:59 CST 2013
Sat Oct 19 10:45:09 CST 2013
sleeping time...
Sat Oct 19 10:45:39 CST 2013
Sat Oct 19 10:45:49 CST 2013

谁能给我一些帮助?非常感谢!

【问题讨论】:

    标签: java timer timertask


    【解决方案1】:

    您应该改用fixed-delay execution,它会根据前一个任务的完成时间而不是其开始时间来启动下一个任务。如果Timer 不支持您的需求,请查看功能更强大的调度库,例如Quartz

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      相关资源
      最近更新 更多