设为首页 加入收藏

TOP

Java线程休眠(sleep)示例
2014-11-23 23:16:50 来源: 作者: 【 】 浏览:7
Tags:Java 线程 休眠 sleep 示例

java.lang.Thread的sleep()方法能使当前线程暂停运行一段时间(单位毫秒)。需要注意的是,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来执行后续的任务。因此,当前线程的实际休眠时间取决于线程调度器,而线程调度器则是由操作系统来进行管理的。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java线程join示例详解 下一篇Java调优之JVM和线程的内存分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: