Java TimerTask увеличить время? - PullRequest
1 голос
/ 20 июля 2011

Привет м, используя следующую задачу таймера, и я хочу увеличить время этой задачи, когда возникает определенное условие

Timer timer2=new Timer();                   
                timer2.schedule(new TimerTask(){
                    public void run(){

                        //whatevr
                    }
                }, 4000);

examlpe

if(mycondition)

{
increase time????
}

как я могу это сделать

Ответы [ 3 ]

4 голосов
/ 20 июля 2011

Извлечение TimerTask во внутреннем или автономном классе.Отмените текущее задание таймера и запланируйте новый экземпляр с увеличенным периодом времени.

3 голосов
/ 20 июля 2011

Вы не можете . Вам нужно будет запланировать новую задачу с увеличенным периодом. И если предыдущая задача устарела, убедитесь, что вы cancel() ее.


Для дальнейшего использования я рекомендую использовать Executors framework.

0 голосов
/ 20 июля 2011

Отправьте еще одну задачу из run (), если необходимо:

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;



public class TimerTaskTest {

private static class MyTimerTask extends TimerTask {
    private final Timer timer;
    private boolean fire;

    private MyTimerTask(Timer timer) {
        this(timer, false);
    }

    private MyTimerTask(Timer timer, boolean fire) {
        this.timer = timer;
        this.fire = fire;
    }

    @Override
    public void run() {
        if (!fire) {
            System.out.println(new Date() + " - steady...");
            timer.schedule(new MyTimerTask(timer, true), 2000);
        } else {
            System.out.println(new Date() + " - go!");
        }
    }
}

public static void main(String args[]) {
    Timer timer = new Timer(true);
    MyTimerTask timerTask = new MyTimerTask(timer);

    System.out.println(new Date() + " - ready...");
    timer.schedule(timerTask, 4000);

    try {
        Thread.sleep(7000);
    } catch (Exception ignore) {
    }
}

}
...