我试图在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中进行延迟?


当前回答

使用thread . sleep (1000);

1000是程序暂停的毫秒数。

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

其他回答

使用thread . sleep (1000);

1000是程序暂停的毫秒数。

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

使用TimeUnit.SECONDS.sleep (1);或thread . sleep (1000);是可以接受的方法。在这两种情况下,你都必须捕获interruptedexception,这会使你的代码变得笨重。有一个名为MgntUtils的开源java库(由我编写),它提供的实用程序已经在内部处理InterruptedException。所以你的代码只包含一行:

TimeUtils.sleepFor(1, TimeUnit.SECONDS);

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

还有一种等待的方式。

你可以使用LockSupport方法,例如:

LockSupport.parkNanos(1_000_000_000); // Disables current thread for scheduling at most for 1 second

幸运的是,它们不会抛出任何受控异常。但另一方面,根据文档,有更多的理由启用线程:

其他线程以当前线程为目标调用unpark 其他线程中断当前线程

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

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

用这个:

public static void wait(int ms)
{
    try
    {
        Thread.sleep(ms);
    }
    catch(InterruptedException ex)
    {
        Thread.currentThread().interrupt();
    }
}

然后,你可以在任何地方调用这个方法,比如:

wait(1000);