запланировать периодическое задание с фиксированной продолжительностью после завершения предыдущего в Java - PullRequest
0 голосов
/ 06 ноября 2011

Я написал приложение, которое периодически запускает поток, используя Timer.scheduleAtFixedRate, например:

this.ExtractorTimer=new Timer();
this.ExtractorTimer.scheduleAtFixedRate(new java.util.TimerTask() {
    public void run() {
        ...
    }
},0, 120000);

Он запускает следующий поток ровно через определенное время (например, через 2 минуты), и если текущий поток не был завершен, он запускается следующий сразу после завершения текущего.
Мне нужно, чтобы следующий поток запускался через некоторое время после завершения текущего потока .
Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 06 ноября 2011

Используйте метод ScheduledExecutorService scheduleWithFixedDelay, который делает именно это.Вы можете получить экземпляр такой услуги исполнителя благодаря фабричному классу Executors.Этот класс является заменой для Таймера, который имеет некоторые недостатки.

1 голос
/ 06 ноября 2011

Вместо использования scheduleAtFixedRate вы можете запланировать следующее выполнение после завершения задачи:

public void initTimer() {
    Timer timer = new Timer();
    scheduleTask(timer);
}


private void scheduleTask(final Timer timer) {
    timer.schedule(new TimerTask() {
        public void run() {
            // perform task here

            scheduleTask(timer);
        }
    }, 120000);
}
...