栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中sleep()和wait()的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中sleep()和wait()的区别

sleep(long n) 和 wait(long n)的区别
  1. sleep是Thread的静态方法。wait是Object的方法
  2. sleep想啥时候用就啥时候用。wait需要先获得对象锁,配合synchronized一起使用
  3. sleep会让出CPU的使用权,但是不会释放对象锁。wait也会让出CPU的使用权,会释放对象锁
  4. 它们的状态都是TIMED_WAITING

首先明确一点:wait/notify只有重量级锁才有,下面讲的锁都是重量级锁

Wait

每个java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向Monitor对象的指针
Monitor的结构如下


获得对象锁的那个线程就是Owner线程
  1. Owner线程在发现某些条件不满足时,即可调用wait方法,进入WaitSet变为WAITING状态,此时会释放锁,并且不占用CPU时间片。
  2. WAITING 线程会在 Owner 线程(如果不是Owner线程,即没有获得对象锁就去调用它的 notify 或 notifyAll 会抛出异常)调用 notify 或 notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入
    EntryList 重新竞争

有误请指出,后面有想到新的的再补充上去

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号