【线程】sleep、wait的区别

sleep和wait的区别

1.关于位置

        sleep是Thread类的静态本地方法

        wait是Object类的本地方法

2.是否会释放锁

        sleep方法不会释放lock

        就是把cpu的执行资格和执行权释放出去,不再运行子线程,当定时的时间结束再取回cpu资源,参与cpu调度(休眠时进入超时等待状态,休眠结束后先进入等待阻塞状态,获取到锁后进入就绪状态)

        wait会释放lock,而且会将线程放入等待队列中

        wait方法会释放lock,当调用无参的wait方法时,会进入等待状态,当调用有参的wait方法时,会进入超时等待状态,其他与sleep相同

3.调用位置

        sleep可以不在synchronized的块下使用

        wait只能在synchronied的块下使用

4.是否需要被唤醒

        sleep不需要被唤醒

        wait再不指定长度的时候需要被唤醒 

5.作用

        sleep一般用于线程的休眠,或者轮循暂停操作

        wait一般用于多线程之间的通讯

6.关于执行  

        sleep会让出CPU的执行时间并且强制执行上下文切换(关于上下文切换,看这篇文章

        wait则不一定,wait结束后可能还是有机会重新竞争到锁继续执行的

        (这里理解的不是很透彻,自我感觉是sleep时CPU明确知道这个线程以后会回来,所以会保存这个线程的上下文,但是wait以后不一定能回来,所以不保存上下文?)

JAVA中调用Thread类的sleep()方法后,当前线程进入阻塞状态还是等待状态? - 知乎

膜拜!华为大牛透彻讲解Java面试100道必考题,不管你工作几年,都得看看!现在免费分享给大家!_哔哩哔哩_bilibili

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值