如何延迟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
不是很灵活。
为了每秒或延迟一秒运行任务,我强烈建议使用ScheduledExecutorService
和scheduleAtFixedRate
或scheduleWithFixedDelay
。
例如,要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访问图书馆。 有关图书馆的文章可以在这里找到