Java timer with not-fixed delay

亡梦爱人 提交于 2019-12-01 05:37:07

问题


I need a Timer that basicaly does something every t seconds. But I want to be able to modify the timer period at which the timer repeats the task. I wrote something like this:

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;
    }

So, After 1000ms delay the timer starts and repeats every moveTime ms. The problem is even if I increased movetime by 1000, the timer always runs at initial delay(1000) but the value of movetime increases(2000,3000,4000 etc) each time the timer calls run().

Am I missing something or what alternative do I have for repeating a task every 't' second with 't' being variable?

Thanks.


回答1:


I don't think that the java.util.Timer class supports this.

Something you can do is use the Timer.schedule(TimerTask, int) method that executes your task one after a certain amount of time. When your task gets executed, you can then scheduled a new timer with the new interval you want.

Something like:

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)
    }
}


来源:https://stackoverflow.com/questions/8386545/java-timer-with-not-fixed-delay

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!