Java Thread Sleep

英文原文:JAVA THREAD SLEEP EXAMPLE Java Thread Sleep Example

java.lang.Thread run() 方法可以使当线程进入休眠状态,时间取决于你声明的毫秒时长。此参数不可以为负数,若传入负数,程序会抛出IllegalArgumentException异常。

还有另外一个方法可以使线程休眠达到毫微秒级别 -- sleep(long mills, int nanos)。毫微秒参数的范围在0 ~ 999999之间。

下面有段例子代码展示的是在执行Thread.sleep() 代码处会让main线程进行休眠状态并持续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));

    }

}

如果你尝试运行了上面的代码,你会发现打印出来的时间结果略微比2秒长点,造成此结果是因为线程休眠工作方式及操作系统具体执行程序的调度方式。

线程休眠的关键点

  • 总会停止当前线程的运行。
  • 线程从进入休眠状态到被唤醒中所花的时间取决于操作系统的统一调度。当操作系统处理任务较少的时候,这个时间会相对准确一些,而当操作系统任务多繁忙时,这个时间会花的相对多些。
  • 线程在休眠状态时并不会丢失其获得监视器及线程锁。
  • 任何其他线程如果打断进入休眠状态的线程,都会抛出一个InterruptedException异常。

线程休眠是如何工作的

Thread.sleep() 实际上是使线程从运行时状态转换为休眠状态,并且等待被唤醒,而唤醒时长取决你传入的时间值。一旦当等待时间结束,线程会从休眠状态转换为运行时状态,并且等待CPU在未来的某个时间点分配资源片区来执行。所以实际等待时间是由操作系统来决定的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,008评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,517评论 1 15
  • 一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。 以前古老的DOS操作系统(V 6....
    GT921阅读 1,042评论 0 3
  • 爱是什么
    向着阳光奔跑123阅读 193评论 0 0
  • 1.Socket简介 Socket 百度百科: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一...
    于是有了涛阅读 3,756评论 0 3