Jeśli chcesz wstrzymać, użyj java.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
Spać przez sekundę lub
TimeUnit.MINUTES.sleep(1);
Spać przez minutę.
Ponieważ jest to pętla, stanowi to nieodłączny problem - dryf. Za każdym razem, gdy uruchamiasz kod, a następnie śpisz, trochę odpadasz od uruchamiania, powiedzmy, co sekundę. Jeśli jest to problem, nie używaj gosleep
.
Co więcej, sleep
nie jest zbyt elastyczny, jeśli chodzi o kontrolę.
Aby uruchamiać zadanie co sekundę lub z jednosekundowym opóźnieniem, zdecydowanie zaleciłbym a ScheduledExecutorService
i albo scheduleAtFixedRate
lub scheduleWithFixedDelay
.
Na przykład, aby uruchomić metodę myTask
co sekundę (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");
}
A w Javie 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");
}
Thread.Sleep()
.