具有非固定延迟的Java计时器

时间:2011-12-05 14:09:43

标签: java timer repeat timertask

我需要Timer基本上每t秒做一次事。但我希望能够修改计时器重复任务的计时器周期。我写了这样的话:

public Bot() {
    timer = new Timer();
    timer.schedule(new Task(), 1000, moveTime = 1000);          
}

public class Task extends TimerTask {
    @Override
    public void run() {
        System.out.println("Time Passed from last repeat:" + movetime)
        moveTime += 1000;
    }

因此,在1000ms延迟后,定时器启动并重复每moveTime ms。问题是即使我将movetime增加1000,计时器始终以初始延迟(1000)运行,但每次定时器调用时movetime的值增加(2000,3000,4000等){{ 1}}。

我是否遗漏了某些东西,或者我有什么替代方案,每隔't'秒重复一次任务,而't'是可变的?

感谢。

1 个答案:

答案 0 :(得分:12)

我不认为java.util.Timer类支持这一点。

你能做的就是使用Timer.schedule(TimerTask, int)方法在一定时间后执行你的任务。当您的任务执行完毕后,您可以使用所需的新间隔安排新的计时器。

类似的东西:

int moveTime = 1000;

Timer timer = new Timer();

public Bot(){
    timer.schedule(new Task(), moveTime);
}

public class Task extends TimerTask {
    @Override
    public void run() {
        System.out.println("Time Passed from last repeat:"+movetime)
        moveTime += 1000;
        timer.schedule(new Task(), moveTime)
    }
}