[译]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
|| 一个理想主义者