Выполнять таймер Java каждые 2 часа - PullRequest
1 голос
/ 16 июня 2011

У меня есть процедура таймера, которую я хочу выполнять каждые два часа.Но моя логика ниже, кажется, выполняется слишком рано, чем ожидалось.Кто-нибудь знает, что я делаю не так?

         (new Timer()).scheduleAtFixedRate(new TimerTask()
          {

            @Override
            public void run()
            {

              try
              {                  
               //TODO: Perform routine.
              }
              catch (Exception ex)
              {
                try
                {
                  throw ex;
                }
                catch (Exception e)
                {

                }
              }
            }

          }, 0, (1000 * 60 * 120));

Спасибо.

Ответы [ 2 ]

5 голосов
/ 16 июня 2011

Согласно javadoc , ваш код должен запускать процедуру немедленно (начальная задержка равна нулю), а затем через каждые 2 часа (период 120 минут).

scheduleAtFixedRate(Задача TimerTask, длительная задержка, длительный период)

Планирует указанную задачу для повторного выполнения с фиксированной скоростью, начиная с указанной задержки.

Если вы хотите первый запуск после 2часов тогда делай

long interval = 1000 * 60 * 120;
scheduleAtFixedRate(task, interval, interval)
3 голосов
/ 16 июня 2011

По возможности, используйте Executors рамки вместо Timer.

Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable(){
    @Override
    public void run()
    {
        // do stuff
    }}, 0, 2, TimeUnit.HOURS);
...