Java中的Thread.sleep()– Java线程睡眠

时间:2020-02-23 14:37:28  来源:igfitidea点击:

Java中的Thread.sleep

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

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

Java线程睡眠示例

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

ThreadSleep.java

package com.theitroad.threads;

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

}

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

Java线程睡眠说明

  • 它总是暂停当前线程的执行。

  • 线程在唤醒和开始执行之前休眠的实际时间取决于系统计时器和调度程序。
    对于安静的系统,实际的睡眠时间接近于指定的睡眠时间,但是对于繁忙的系统,实际时间会更多。

  • 线程休眠不会丢失任何监视器,也不会锁定当前已获取的线程。

  • 任何其他线程都可以在睡眠中中断当前线程,在这种情况下会抛出InterruptedException。

线程睡眠如何工作

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