如何在 Java 中设置延迟?

2022-08-31 04:22:11

我正在尝试在Java中做一些事情,我需要一些东西在一段时间内等待/延迟几秒钟。

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的新手。有什么建议吗?


答案 1

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

TimeUnit.SECONDS.sleep(1);

睡一秒钟或

TimeUnit.MINUTES.sleep(1);

睡一分钟。

由于这是一个循环,这就提出了一个固有的问题 - 漂移。每次你运行代码然后睡觉时,你都会从运行中漂移一点点,比如说,每一秒。如果这是一个问题,则不要使用 .sleep

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

对于每秒或以一秒延迟运行一个任务,我强烈建议使用 ScheduledExecutorServicescheduleAtFixedRatescheduleWithFixedDelay

例如,要每秒运行该方法 (Java 8):myTask

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

答案 2

Thread.sleep(1000);

1000是程序将暂停的毫秒数。

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