Wenn Sie pausieren möchten, verwenden Sie java.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
Um eine Sekunde lang zu schlafen oder
TimeUnit.MINUTES.sleep(1);
Um eine Minute zu schlafen.
Da es sich um eine Schleife handelt, tritt ein inhärentes Problem auf - die Drift. Jedes Mal, wenn Sie Code ausführen und dann schlafen, entfernen Sie sich ein wenig davon, zum Beispiel alle Sekunde zu laufen. Wenn dies ein Problem darstellt, verwenden Sie nicht sleep
.
Des Weiteren ist sleep
nicht sehr flexibel, wenn es um die Steuerung geht.
Um eine Aufgabe jede Sekunde auszuführen oder mit einer Verzögerung von einer Sekunde empfehle ich nachdrücklich ein ScheduledExecutorService
und entweder scheduleAtFixedRate
oder scheduleWithFixedDelay
.
Zum Beispiel, um die Methode myTask
jede Sekunde auszuführen (Java 8):
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
Und in Java 7:
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
myTask();
}
}, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}