如何延迟Java?

我正在尝试用Java做一些事情,我需要在while循环中等待/延迟一段时间。

while (true) { if (i == 3) { i = 0; } ceva[i].setSelected(true); // I need to wait here ceva[i].setSelected(false); // I need to wait here i++; } 

我想构建一个步序器,我是Java的新手。 有什么建议么?

如果要暂停,请使用java.util.concurrent.TimeUnit

 TimeUnit.SECONDS.sleep(1); 

睡一秒钟或

 TimeUnit.MINUTES.sleep(1); 

睡一会儿

由于这是一个循环,这提出了一个固有的问题 – 漂移。 每次你运行代码然后再睡觉时,你会每隔一秒就跑步一次。 如果这是一个问题,那么不要使用sleep

此外,在控制方面, sleep不是很灵活。

为了每秒或延迟一秒运行任务,我强烈建议使用ScheduledExecutorServicescheduleAtFixedRatescheduleWithFixedDelay

例如,要myTask运行myTask方法(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"); } 

在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"); } 

使用Thread.sleep(1000) ;

1000是程序暂停的毫秒数。

 try { Thread.sleep(1000); } catch(InterruptedException ex) { Thread.currentThread().interrupt(); } 

您需要使用Thread.sleep()调用。

更多信息: http : //docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

使用TimeUnit.SECONDS.sleep(1);Thread.sleep(1000); 是可以接受的方式。 在这两种情况下你都必须捕获InterruptedException ,这会使你的代码变得庞大。有一个名为MgntUtils的Open Source java库(由我编写),它提供了已经处理InterruptedException实用程序。 所以你的代码只包含一行:

 TimeUtils.sleepFor(1, TimeUnit.SECONDS); 

在这里查看javadoc。 您可以从Maven Central或Github访问图书馆。 有关图书馆的文章可以在这里找到