首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >wait和sleep

wait和sleep

作者头像
在水一方
发布2022-06-14 15:54:51
发布2022-06-14 15:54:51
2.5K0
举报
文章被收录于专栏:在水一方在水一方

前言

wait和sleep这部分知识点事比较容易混淆和不好理解的知识点,涉及到线程和锁方面的知识点,也是面试当中经常问的知识点,本小结来做一个小结

wait是Object类中一个方法,先来看看api中对于该方法的说明。在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行

sleep 和 wait 有什么区别?

sleep 和 wait 几乎是所有面试中必问的题,但想完全回答正确似乎没那么简单。对于 sleep 和 wait 的区别,通常的回答是这样的: wait 必须搭配 synchronize 一起使用,而 sleep 不需要; 进入 wait 状态的线程能够被 notify 和 notifyAll 线程唤醒,而 sleep 状态的线程不能被 notify 方法唤醒;wait 通常有条件地执行,线程会一直处于 wait 状态,直到某个条件变为真,但是 sleep 仅仅让你的线程进入睡眠状态;wait 方法会释放对象锁,但 sleep 方法不会。 但上面的回答显然遗漏了一个重要的区别,在调用 wait 方法之后,线程会变为 WATING 状态,而调用 sleep 方法之后,线程会变为 TIMED_WAITING 状态。

如何证明wait是释放锁sleep不释放锁

抛异常的情况

直接调用而不在synchronized()中调用wait方法时会抛异常

根据Api查询该异常的原因是:

后面继续完善................

参考博客:https://blog.csdn.net/weixin_39636102/article/details/113323853

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • sleep 和 wait 有什么区别?
  • 如何证明wait是释放锁sleep不释放锁
  • 抛异常的情况
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档