关于java中Thread.sleep()的具体使用

本文主要介绍了 java中Thread.sleep()的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

sleep

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

一个进程在运行态时调用sleep(),进入等待态,睡眠结束以后,并不是直接回到运行态,而是进入就绪队列,要等到其他进程放弃时间片后才能重新进入运行态。所以sleep(1000),在1000ms以后,线程不一定会被唤醒。sleep(0)可以看成一个运行态的进程产生一个中断,由运行态直接转入就绪态。这样做是给其他就绪态进程使用时间片的机会。总之,还是操作系统中运行态、就绪态和等待态相互转化的问题。

功能介绍:

让当前线程由运行状态进入到阻塞状态,进而使其他线程有机会继续执行任务。虽然使线程休眠,但是并不释放对象锁,所以说如果在同步块中使用sleep(),其他线程仍然无法获得执行权限。

注意:sleep()方法定义在Thread类中,会调用sleep(millis)这个本地方法,抛出InterruptedException异常,因此需要捕获该异常

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

Thread sleep(long millis, int nanos)  
暂停当前线程的执行,暂停时间为millis毫秒数加上nanos纳秒数。
纳秒允许的取值范围为0~999999.

例:

1

2

3

4

5

6

7

8

9

public class Dome {

    public static void main(String[] args) throws InterruptedException {

        for (int i = 0; i < 10; i++) {

            System.out.println(i);

            //每隔一秒钟进行一次循环输出

            Thread.sleep(1000);//单位:毫秒

        }

    }

}

运行结果:

0
1
2
3
4

总结

  • 它只用于暂停当前线程的执行。
  • 线程被wake up并开始执行的实际时间取决于操作系统的CPU时间片长度及调度策略。对于相对空闲的系统来说,sleep的实际时间与指定的sleep时间相近,但对于操作繁忙的系统,这个时间将会显得略长一些。
  • 其他的任意线程都能中断当前sleep的线程,并会抛出InterruptedException。
  • sleep()是Thread类的Static(静态)的方法,因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象的机锁并木有被释放,其他线程无法访问这个对象(即使睡着也持有对象锁)。
  • 在sleep()休眠时间期满后,该线程不一定会立即执行,这是因为其它线程可能正在运行而且没有被调度为放弃执行,除非此线程具有更高的优先级。
  • 当一个线程执行代码的时候调用了sleep方法后,线程处于睡眠状态,需要设置一个睡眠时间,此时有其他线程需要执行时就会造成线程阻塞,而且sleep方法被调用之后,线程不会释放锁对象,但是锁还在该线程手里,等睡眠一段时间后,该线程就会进入就绪状态。

线程阻塞:

通常是指一个线程在执行过程中暂停,以等待某个条件的触发。可以简单理解为所有比较消耗线程时间的操作。如:常见的文件读取、接受用户输入。

到此这篇关于 java中Thread.sleep()的具体使用的文章就介绍到这了,希望可以帮到你。

转自:微点阅读   https://www.weidianyuedu.com

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值