面试题:sleep vs wait


共同点:wait(),wait(long)和sleep(long) 的效果都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态
一方法归属不同
        1.sleep(long)是 Thread 的静态方法
        2.而 wait(, wait(long)都是 Object 的成员方法,每个对象都有
二醒来时机不同
        1.执行 sleep(long)和wait(long)的线程都会在等待相应毫秒后醒来
        2.wait(long) 和wait()还可以被 notify 唤醒,wait() 如果不唤醒就一直等下去
        3.它们都可以被打断唤醒
三锁特性不同
        1.wait 方法的调用必须先获取wait 对象的锁,而 sleep 则无此限制
        2.wait 方法执行后会释放对象锁,允许其它线程获得该对象锁(我放弃,但你们还可以用)
        3.而sleep 如果在 synchronized 代码块中执行,并不会释放对象锁(我放弃,你们也用不 了)

注意:线程sleep与synchronized解锁,sleep写在synchronized外面与里面的区别。

1.结论:当sleep写在synchronized里面的时候,当前线程会休眠,让出cpu,但是synchronized不会解锁,synchronized锁定的方法或者代码块不会往下执行,临界资源别的线程不能用。
2.结论:当sleep写在synchronized外面的时候,当前线程会休眠,让出cpu,写在外面就和锁没关系了,临界资源别的线程也就可以用了,只不过是让当前线程休息一会罢了。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值