请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于wait、notify、notifyall为什么定义在Object类中,而不是Thread中

老师,如题,请老师帮忙解释一下,虽然也去网上了解过,但还是特别理解

正在回答 回答被采纳积分+3

2回答

gscjz123 2019-04-02 20:48:42

因为每个对象都关联着一个monitor entry,wait、notify/notifyAll,分别为主动释放monitor,唤醒争抢monitor的线程。当然这些方法只能在synchronized的作用域当中使用,因为没有参与monitor的争夺就无从谈起wait和notify。底层这么干,上层代码就有对应的现象了。详情可以用jstack <pid> 观察线程争夺monitor的情况。

1 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    感谢同学的给力回答
    回复 有任何疑惑可以回复我~ 2019-04-03 17:35:57
翔仔 2019-04-02 20:08:52

同学好,我理解的话,JAVA提供的锁是对象级的而不是线程级的(比如在讲解synchronized的时候,咱们也介绍了对象锁),每个对象都有锁,通过线程获得。而对象具备释放锁、唤醒等待对象锁的方法,属于对象的行为,这样就比较合理,而用Thread的话指定起来就比较模糊,不清楚是哪个线程的行为。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑7546459 #1
    好的,理解了,谢谢老师。
    回复 有任何疑惑可以回复我~ 2019-04-03 23:19:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信