wait为什么一定要写在同步块中?
浏览博客时看到这个阿里的面试题?将被人的想法和自己的想法记录下来
第一点:简书博主占小狼,wait 会引起lost wake up问题,就是如果wait 和 notify写在同一个synchronized对象中话,会出现发送notify的之后,另外一个该对象的才刚刚调用wait方法,这就导致调用wait的对象一直无法被显式唤醒。
第二点:这个是自己的想法,因为wait() 是Object类型中方法,也就是wait是针对于对象而言,而每个对象都有自己的monitor锁,访问操作这个对象首先要获得monitor锁,而且也由于wait()操作会放弃对cpu的占用,所以想要唤醒某个线程,必要要获取对象的锁,也就是说要获取synchronized,所以wait() 和 notify() 必须要写在同一个对象的synchronized代码块中。
欢迎补充自己的想法。