2012-01-26 47 views

回答

4

看看java.util.Timer。

你可以找到使用的例子here

你也可以考虑石英,这是更为强大,可以在组合 与Spring 这里使用是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."); 
     } 
} 
+0

Timer类和Quartz库都提供类似cron的界面,在特定时间安排作业或每N个时间单元进行一次。我需要的是一个调度程序,它调度任务以达到特定的速率,例如,每个时间单位调用N个函数(方法)。就像在我发布@Tichodroma – dkart

+0

@ dkart的片段中一样,正如您在我的答案中所看到的,创建具有您期望的行为的应用程序非常容易...除非我错过了某件东西 –

+0

thanx很多@Champagne我认为这是我需要的! – dkart

5

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

石英是可以与集成,或者伴随虚拟的任何Java EE和Java SE应用程序一个全功能的,开源的作业调度服务 - 从最小的立场 - 最大的电子商务系统的应用程序。

2

一种轻质的选择是ScheduledExecutorService

的大致相当于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); 
} 

练习留给读者:

  • 定义回调接口
  • 决定如何处理返回的未来做
  • 切记关闭执行器
+0

+1可能是最好的解决方案。有趣的是,Java代码片段的时间并不比Python相当长。 – helpermethod

+0

谢谢!我狡猾地省略了一些样板文件:) –

相关问题