2010-08-22 11 views

Antwort

70

In Java 5+ mit einem ScheduledExecutorService:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
exec.scheduleAtFixedRate(new Runnable() { 
    @Override 
    public void run() { 
    // do stuff 
    } 
}, 0, 5, TimeUnit.SECONDS); 

Das obige Verfahren bevorzugt wird. Vor der Java 5 verwendet, um Sie Timer und TimerTask:

timer.scheduleAtFixedRate(new TimerTask() { 
    @Override 
    public void run() { 
    // do staff 
    } 
}, 0, 5000); 
+5

was, wenn ich Hauptfenster der Anwendung zu schließen? Wird diese Aufgabe noch ausgeführt? – Tomasz

8

Mit einem ScheduledExecutorService.

Werfen Sie einen Blick auf Executors.newScheduledThreadPool. Es ermöglicht Ihnen, eine ScheduledExecutorService erstellt, mit der Sie senden können Runnable s in regelmäßigen Abständen ausgeführt werden.

3
while (true) { 
    thread.sleep(1000) 
    method(); 
} 

In vielen Fällen wird es bessere Alternativen. Aber das ist der einfachste Weg, um eine regelmäßige Ausführung Ihrer Methode() in einem Intervall von 1000ms + n zu implementieren (wobei n ist die Menge an Zeit für die Ausführung Methode())

Natürlich statt 1000, können Sie setzen beliebiger Millisekundenwert, den Sie wünschen. Es könnte auch eine Idee sein, die while-Schleife auf ein Flag zu implementieren, das ein anderer Thread steuert; Damit gibt es eine Möglichkeit, die Ausführung der Schleife zu stoppen, ohne das Programm beenden zu müssen.

+2

fast - es wird mindestens 1000. Es hängt davon ab, wenn der Thread-Scheduler beschließt, den Thread erneut zu starten. Es wird 1000 + a + n sein (wobei a die Zeit ist, die der Scheduler benötigt, um den Thread erneut zu aktivieren) – RNJ

1

Verwenden Sie den folgenden Code:

Timer timer = new Timer(); 
timer.schedule(new TimerTask() 
{ 
    public void run() { 
    // do your work 
    } 
}, 0, 60*(1000*1)); 
Verwandte Themen