Jika Anda ingin berhenti kemudian gunakan java.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
Tidur selama satu detik atau
TimeUnit.MINUTES.sleep(1);
Tidur sebentar.
Karena ini adalah loop, ini menyajikan masalah bawaan - drift. Setiap kali Anda menjalankan kode dan kemudian tidur, Anda akan terhanyut sedikit dari berlari, katakanlah, setiap detik. Jika ini merupakan masalah maka jangan gunakan sleep
.
Lebih jauh, sleep
tidak terlalu fleksibel dalam hal kontrol.
Untuk menjalankan tugas setiap detik atau pada penundaan satu detik saya akan sangat merekomendasikan ScheduledExecutorService
dan scheduleAtFixedRate
atau atau scheduleWithFixedDelay
.
Misalnya, untuk menjalankan metode myTask
setiap detik (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");
}
Dan di Jawa 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()
.