Существует ли Java-эквивалент модуля Python Sched? - PullRequest
3 голосов
/ 26 января 2012

Раймонд Хеттингер опубликовал фрагмент , где он использует модуль sched, доступный в стандартной библиотеке Python, для вызова функций с определенной скоростью (N раз в секунду).Интересно, есть ли в Java эквивалентная библиотека?

Ответы [ 5 ]

5 голосов
/ 26 января 2012

Взгляните на http://quartz -scheduler.org /

Quartz - это полнофункциональная служба планирования заданий с открытым исходным кодом, которую можно интегрировать или использовать практически с любым приложением Java EE или Java SE - от самого маленького автономного приложения до крупнейшей системы электронной коммерции. 1007 *

4 голосов
/ 26 января 2012

Посмотрите на java.util.Timer.

Вы можете найти пример использования здесь

Вы также можете рассмотреть Кварц, который гораздо более мощныйи может использоваться в сочетании с Spring. Вот пример

Вот мой эквивалент использования java.util.Timer фрагмента кода, который вы упомянули

package perso.tests.timer;

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

public class TimerExample  extends TimerTask{

      Timer timer;
      int executionsPerSecond;

      public TimerExample(int executionsPerSecond){
          this.executionsPerSecond = executionsPerSecond;
        timer = new Timer();
        long period = 1000/executionsPerSecond;
        timer.schedule(this, 200, period);
      }

      public void functionToRepeat(){
          System.out.println(executionsPerSecond);
      }
        public void run() {
          functionToRepeat();
        }   
      public static void main(String args[]) {
        System.out.println("About to schedule task.");
        new TimerExample(3);
        new TimerExample(6);
        new TimerExample(9);
        System.out.println("Tasks scheduled.");
      }
}
2 голосов
/ 26 января 2012

Облегченным вариантом является ScheduledExecutorService .

Примерно эквивалентный Java-код для фрагмента Python будет выглядеть так:

private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

public ScheduledFuture<?> newTimedCall(int callsPerSecond, 
    Callback<T> callback, T argument) {
    int period = (1000 / callsPerSecond);
    return 
        scheduler.scheduleAtFixedRate(new Runnable() {
            public void run() {
                callback.on(argument);
            }
        }, 0, period, TimeUnit.MILLISECONDS);
}

Упражнения, оставленные читателю:

  • Определить интерфейс обратного вызова
  • Решить, что делать с возвращенным будущим
  • Не забудьте закрыть исполнителя
1 голос
/ 26 января 2012

Как насчет java.util.Timer? См этот связанный ответ .

0 голосов
/ 26 января 2012

Как насчет использования java.util.Timer класса ?

Вы можете найти пример кода здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...