如何在执行下一行之前让java等待一秒,而不使用try / catch

时间:2016-06-24 03:57:25

标签: java try-catch wait

我想知道是否有办法做到这一点,没有任何混乱或混乱。 此外,当我执行wait()方法时,它会出现java.lang.IllegalMonitorStateException错误。

4 个答案:

答案 0 :(得分:3)

Thread.sleep()方法可以做你想要的。这是一种简单的方法,可以在给定的时间内停止执行(并不总是准确的)。根据{{​​3}}:

  

Thread.sleep导致当前线程暂停执行指定的时间段。这是使处理器时间可用于应用程序的其他线程或可能在计算机系统上运行的其他应用程序的有效方法。

所以,要调用它,请使用

Thread.sleep(1000);

这会睡一秒钟直到进一步执行。时间以毫秒或纳秒为单位。

由于操作系统及其配置,此方法可能并不总是准确的。

答案 1 :(得分:1)

再一次,Guava是你的朋友:

Uninterruptibles.sleepUninterruptibly(1,TimeUnit.SECONDS);

这就是它的实现方式:

 public static void sleepUninterruptibly(long sleepFor, TimeUnit unit) {
    boolean interrupted = false;
    try {
      long remainingNanos = unit.toNanos(sleepFor);
      long end = System.nanoTime() + remainingNanos;
      while (true) {
        try {
          // TimeUnit.sleep() treats negative timeouts just like zero.
          NANOSECONDS.sleep(remainingNanos);
          return;
        } catch (InterruptedException e) {
          interrupted = true;
          remainingNanos = end - System.nanoTime();
        }
      }
    } finally {
      if (interrupted) {
        Thread.currentThread().interrupt();
      }
    }
  }

BR

答案 2 :(得分:1)

没有Thread和try / catch:

static void pause(){
    long Time0 = System.currentTimeMillis();
    long Time1;
    long runTime = 0;
    while(runTime<1000){
        Time1 = System.currentTimeMillis();
        runTime = Time1 - Time0;
    }
}

答案 3 :(得分:0)

在Java中

Thread.sleep(intervalInMills);
TimeUnit.MILLISECONDS.sleep(intervalInMills);

定时器

new Timer().scheduleAtFixedRate(task, delay, period);

使用Executor Framework

ScheduledExecutorService.scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

使用Spring,

@Scheduled(fixedDelay = 1000)
private void method() {
    // some code
}

您还可以使用cron安排fixedRateinitialDelay