Thread.sleep()
方法可用于暂停当前线程的执行指定时间(以毫秒为单位)。毫秒的参数值不能为负数,否则会抛出IllegalArgumentException
异常。
还有另一个重载方法sleep(long millis,int nanos)
可用于暂停执行当前线程达指定的毫秒和纳秒。允许的纳秒值介于0
和999999
之间。
Java线程睡眠示例
这是一个简单的程序,Thread.sleep()
用于暂停主线程执行2
秒。
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
异常。