[译]Java Thread Sleep示例

Java Thread Sleep示例

java.lang.Thread sleep(long millis)方法被用来暂停当前线程的执行,暂停时间由方法参数指定,单位为毫秒。注意参数不能为负数,否则程序将会抛出IllegalArgumentException。

还有另外一个sleep(long millis, int nanos)方法,功能与上面方法相同,只不过暂停时间为millis毫秒数加上nanos纳秒数。纳秒允许的取值范围为0~999999.

下面的程序通过调用Thread.sleep()方法,使main线程的执行过程暂停了2秒钟。

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

    } 
}  

运行上面的程序,会看到实际输出的sleep时间会比2000毫秒稍长一些,这个主要由线程的sleep工作机制以及操作系统具体的线程调度实现引起的。

Thread Sleep 要点

  • 它只用于暂停当前线程的执行。
  • 线程被唤醒(wake up)并开始执行的实际时间取决于操作系统的CPU时间片长度及调度策略。对于相对空闲的系统来说,sleep的实际时间与指定的sleep时间相近,但对于操作繁忙的系统,这个时间将会显得略长一些。
  • 线程在sleep过程中不会释放它已经获得的任意的monitor和lock等资源。
  • 其他的任意线程都能中断当前sleep的线程,并会抛出InterruptedException。

Thread sleep工作机制

Thread.sleep()会通知线程调度器把当前线程在指定的时间周期内置为wait状态。当wait时间结束,线程状态重新变为Runnable并等待CPU的再次调度执行。所以线程sleep的实际时间取决于线程调度器,而这是由操作系统来完成的。

原文链接:http://www.journaldev.com/1020/java-thread-sleep-example

原文地址:https://www.cnblogs.com/enjiex/p/3661595.html