Core Java Tutorial -- Thread.sleep()

  1. Thread.sleep in Java
    1. Java Thread Sleep Example
    2. Java Thread Sleep important points
    3. How Thread Sleep Works

Thread.sleep in Java

可以使用 Thread.sleep() 方法来暂停当前线程的执行,并以毫秒为单位指定时间。毫秒的参数值不能为负值,否则会抛出 IllegalArgumentException 异常。

还有另外一种重载的方法 sleep(long millis, int nanos) ,可用于暂停当前线程的执行达到指定的毫秒和纳秒。允许的纳秒值介于 0 和 999999 之间。

Java Thread Sleep Example

这是一个简单的程序,其中Thread.sleep() 用于暂停主线程执行2秒。

ThreadSleep.java

package Thread;

public class ThreadSleep {

    public static void main(String[] args) throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
    }

}

If you will run the above program, you will notice that the thread sleep time it prints is slightly greater than 2000. This is caused by how thread sleep works and operating system specific implementation of thread scheduler.

运行上述程序,你会注意到它打印的线程休眠时间略大于 2000。这是由线程睡眠工作方式和线程调度程序的操作系统特定实现引起的。

Java Thread Sleep important points

  1. 它总是暂停当前线程的执行。
  2. 实际时间线程在唤醒之前休眠并开始执行取决于系统定时器和调度程序。 对于一个安静的系统,实际的睡眠时间接近指定的睡眠时间,但对于繁忙的系统,它会稍微多点。
  3. 线程睡眠不会丢失当前线程获取的任何监视器或锁。
  4. 任何其他线程都可以在睡眠中断当前线程,在这种情况下会抛出InterruptedException 异常。

How Thread Sleep Works

Thread.sleep() 与线程调度程序交互,使当前线程在指定的时间段内处于等待状态。等待时间结束后,线程状态变为可运行状态并等待 CPU 进一步执行。所以当前线程睡眠的实际时间取决于作为操作系统一部分的线程调度程序。

你可能感兴趣的:(Java)