关于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的情况。
112019-04-03 -
翔仔
2019-04-02
同学好,我理解的话,JAVA提供的锁是对象级的而不是线程级的(比如在讲解synchronized的时候,咱们也介绍了对象锁),每个对象都有锁,通过线程获得。而对象具备释放锁、唤醒等待对象锁的方法,属于对象的行为,这样就比较合理,而用Thread的话指定起来就比较模糊,不清楚是哪个线程的行为。
012019-04-03
相似问题