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, sleepnie jest zbyt elastyczny, jeśli chodzi o kontrolę.
Aby uruchamiać zadanie co sekundę lub z jednosekundowym opóźnieniem, zdecydowanie zaleciłbym a ScheduledExecutorServicei albo scheduleAtFixedRatelub scheduleWithFixedDelay.
Na przykład, aby uruchomić metodę myTaskco 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().