是否有Java sched模块的Java等价物?

时间:2012-01-26 10:31:11

标签: java python function scheduling

Raymond Hettinger发布了一个snippet,他使用标准Python库中提供的sched模块来调用特定速率的函数(每秒N次)。我想知道Java中是否有一个等效的库。

5 个答案:

答案 0 :(得分:5)

查看http://quartz-scheduler.org/

  

Quartz是一个功能齐全的开源作业调度服务,可以与几乎任何Java EE或Java SE应用程序集成或一起使用 - 从最小的独立应用程序到最大的电子商务系统。 / p>

答案 1 :(得分:4)

看看java.util.Timer。

您可以找到使用here

的示例

您还可以考虑Quartz,它功能更强大,可以组合使用 与春天 这是example

这是我使用你提到的代码片段的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 :(得分:2)

轻量级选项是ScheduledExecutorService

与python代码段大致相同的Java代码是:

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

练习留给读者:

  • 定义回调界面
  • 决定如何处理返回的未来
  • 请记住关闭执行程序

答案 3 :(得分:1)

java.util.Timer怎么样?请参阅this related answer

答案 4 :(得分:0)

如何使用java.util.Timer class

您可以找到示例代码here