如何在 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 新手。有什么建议么?

原文由 ardb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

 TimeUnit.SECONDS.sleep(1);

睡一秒钟或

TimeUnit.MINUTES.sleep(1);

睡一分钟。

由于这是一个循环,这就带来了一个固有的问题——漂移。每次你运行代码然后睡眠时,你都会偏离运行状态,比如说,每一秒。如果这是一个问题,那么不要使用 sleep

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

对于每秒或延迟一秒运行任务,我 强烈 推荐 ScheduledExecutorServicescheduleAtFixedRatescheduleWithFixedDelay

例如,要每秒运行 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");
}

原文由 Boris the Spider 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Thread.sleep(1000)

1000 是程序暂停的毫秒数。

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

原文由 Anju Aravind 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题