2012-01-26 71 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

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

相關問題