java wait()和sleep() 的区别

之前在写代码的时候,如果需要让线程等待一会,就直接使用sleep()方法,一直也没有出过问题。而wait()方法的出场率很高,每次打一个句点的时候,对象的方法弹出来,总是能看到wait()在其中,wait()是一个Object对象中为数不多的方法之一,开始在尝试使用wait()方法的时候总是出错,感觉这个方法很麻烦,但是一直也没有研究这是一个什么样的方法。

最近在研究java同步机制,才知道每个对象中都唯一一个对象锁的东西,这个对象锁的设置就是为了实现传统PV锁的功能。wait()字面上的意思是等待,意思就是等待对象的对象锁。相对应的,notify()方法就是释放对象的对象锁,然后由OS来分配给在等待对象锁的兄弟们,wait()和notify()方法都要在synchronized代码块中使用。

总的来说,wait()方法有sleep()有类似的地方,都是延迟一个方法的运行,但是sleep()一般来说都会设置一个时间参数,或者等待一个interupt()来随时叫醒。而且sleep()方法就是单纯的释放占有CPU的权利,睡起来后再继续工作,没有对对象锁的操作。sleep()还有个很神奇的地方,就是在哪个类中调用sleep()方法,谁就去睡觉。即使在A类中调用B.sleep(1000)方法,也是A去睡觉。

wait()方法一般不设置时间参数,而是等待另一个方法执行完后释放对象锁出来后再开始执行,用对象锁保持一个方法执行的顺序关系,也维护了每次一个方法访问共有变量。巧妙的使用wait()能够轻易的实现很多多线程问题,然而使用不好也很容易造成死锁的问题。

转载于:https://www.cnblogs.com/ccliekkas/p/5001611.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值