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

来源:11-7 SpringAOP的原理

慕尼黑7546459

2019-04-02

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

写回答

2回答

gscjz123

2019-04-02

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

1
1
翔仔
感谢同学的给力回答
2019-04-03
共1条回复

翔仔

2019-04-02

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

0
1
慕尼黑7546459
好的,理解了,谢谢老师。
2019-04-03
共1条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程