2009-07-31 5 views
1

HIWie führe ich eine Methode um XX: XX: XX Zeit?

Ich möchte eine Methode in meinem Programm evry X Stunden ausführen, wie geht das? Im googeln und es gibt nichts:/

+3

klingt wie ein Cron Job. – Tom

+0

In welcher Sprache möchten Sie das tun? – jtbradle

+2

Wird das Programm kontinuierlich ausgeführt oder muss es gestartet werden? –

Antwort

6

Sie einen Blick auf die Timer Klasse nehmen könnte, aber die beste Möglichkeit ist, ein ScheduledExecutorService zu verwenden:

z.B. Dies wird zu einem geplanten Rate piepen:

import static java.util.concurrent.TimeUnit.*; 
class BeeperControl { 
    private final ScheduledExecutorService scheduler = 
     Executors.newScheduledThreadPool(1); 

    public void beepForAnHour() { 

     final Runnable beeper = new Runnable() { 
       public void run() { 
        System.out.println("beep"); 
       } 
      }; 

     final ScheduledFuture<?> beeperHandle = 
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); 

     scheduler.schedule(new Runnable() { 
       public void run() { 
        beeperHandle.cancel(true); 
       } 
     }, 60 * 60, SECONDS); 
    } 
} 
+0

Dies sind gute Optionen für einen Prozess, der kontinuierlich ausgeführt wird und einige vordefinierte Aufgaben enthält. Für "dauerhafte" Aufgaben (Jobs, die dynamisch geplant werden müssen, und die im Fall eines Anwendungsabsturzes gespeichert werden müssen), sollten Sie den Quartz Scheduler (http://www.opensymphony.com/quartz) – erickson

+0

nur eine Nebenrolle betrachten Nitpick ... wenn ich diesen Code richtig lese, "piepst" er nicht, wie du es beschreibst, sondern druckt stattdessen die Zeichenkette "Piep". IIRC, wenn Sie stattdessen die Zeichenfolge "\ a" gedruckt haben, würde es tatsächlich einen hörbaren Signalton geben. – rmeador

+0

@rmeador - nur wenn es eine Konsolen-App ist, sonst müssen Sie etwas tun wie java.awt.Toolkit.getDefaultToolkit(). Beep() – mpontillo

0

Scheduled Task (in Windows) oder Cron (in Unix)

+1

Basierend auf den Anforderungen wird eine Cron- oder geplante Aufgabe nicht funktionieren. Die Anforderung besteht darin, eine bestimmte Funktion in einer Anwendung auszuführen und keine Anwendung auszuführen. AFAIK, Cron und geplante Aufgabe können nur Skripte und Anwendungen ausführen und haben keine Kontrolle über den Ablauf einer bestimmten Anwendung. –

0

Sie könnten die Zeit an einem bestimmten Punkt speichern, als einen Timer zu starten. Wenn die Zeit abgelaufen ist, führen Sie die Methode aus und starten den Timer neu.

9

Sie könnten Quartz betrachten.

Es ist eine Art Cron, die in Java läuft. Ich gebe zu, dass es wahrscheinlich ein Overkill ist, wenn Sie nur einen Job planen wollen.

+0

Wenn ich zwischen den Zeilen lese, würde ich annehmen, dass Quartz übertrieben ist und in diesem Fall wahrscheinlich zu schwierig zu verwenden ist. In der Tat ist java.util.Timer trotz seiner technischen Nachteile wahrscheinlich besser geeignet als ExecutorService. – erickson

2

Ich verwende das Quarz-Framework für die meisten meiner Planung (http://www.quartz-scheduler.org/), aber wenn Sie etwas einfaches tun, ist java.util.Timer in Ordnung.

// in a class body... 

public static void main(String[] argv) { 
    Timer timer = new Timer(); 
    int secondsBetweenRuns = 3600; 
    timer.schedule(new MyOwnTask(), 0, secondsBetweenRuns * 1000); 
} 

static class MyOwnTask extends TimerTask { 

    public void run() { 
     doWhateverYouNeedToDoEveryHour(); 
    } 
} 
Verwandte Themen