首页 > 代码库 > Java线程休眠(sleep)示例

Java线程休眠(sleep)示例

    java.lang.Threadsleep()方法能使当前线程暂停运行一段时间(单位毫秒)。需要注意的是,sleep()方法的参数不能为负,否则会抛出IllegalArgumentException异常。

    除此之外,还有另一个方法sleep(long millis, int nanos),该方法可用于使当前线程暂停millis毫秒nanos纳秒。需要注意的是,参数nanos的取值范围为[0, 999999]。

    下面的代码演示如何用Thread.sleep()方法令主线程暂停执行2秒。

    ThreadSleep.java

package com.journaldev.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略多一些,这取决于线程休眠是如何实现的,以及操作系统定义的线程调度机制。

线程休眠要点

1. 线程休眠总是暂停当前线程

2. 在被唤醒并开始执行前,线程休眠的实际时间取决于系统计时器和调度器。对比较清闲的系统来说,实际休眠的时间十分接近于指定的休眠时间,但对于繁忙的系统,两者之间的差距就较大。

3. 线程休眠并不会丢失当前线程已获取的任何监视器和锁。

4. 其他线程可以中断当前进程的休眠,但会抛出InterruptedException异常。

线程休眠的工作原理

    Thread.sleep()与线程调度器交互,它将当前线程设置为等待一段时间的状态。一旦等待时间结束,线程状态就会被改为可运行(runnable),并开始等待CPU来执行后续的任务。因此,当前线程的实际休眠时间取决于线程调度器,而线程调度器则是由操作系统来进行管理的。