Java线程中wait()与sleep()区别

不同点:
  1. waitp()是用于线程间通讯的,sleep()只是用于短时间暂停当前线程的。
  2. 调用wait()的时候会释放此线程持有的锁,但是调用sleep()不会释放掉锁(只会让出CPU,等sleep时间结束之后再来调度此线程)
  3. wait()方法应在同步代码块中调用,但是sleep()方法不需要。
  4. wait()是Object的方法,而sleep()是Thread类的方法。
  5. wait()是可以被notify()/notifyAll()方法唤醒的,但是sleep()方法则不会。
  6. sleep()方法在休眠之后会自动退出阻塞状态,wait()方法则需要等待被其他线程中断后才会退出阻塞状态。
相同点:
  1. 线程的wait()和sleep()状态都会被interrupt()方法中断阻塞状态,使线程抛出异常。
注意点:
  1. 如果在同步方法块中使用sleep()方法,会阻塞其他线程的执行(因为并没有释放掉锁,只是释放掉了CPU)。
  2. 使用notify()/notifyAll()方法唤醒线程,并不会让此线程马上得到锁,而是通知此线程可以去参与获得锁的竞争了。
参考:

https://blog.csdn.net/u012050154/article/details/50903326
https://juejin.im/post/5e644b2fe51d452701797444

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素人岳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值