校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 专业课 > 线程相关
题目

阿里面试题:wait为什么一定要写在同步块中?

解答

第一点:wait 会引起lost wake up问题,就是如果wait 和 notify写在同一个synchronized对象中话,会出现发送notify的之后,另外一个该对象的才刚刚调用wait方法,这就导致调用wait的对象一直无法被显式唤醒。

第二点:这个是自己的想法,因为wait() 是Object类型中方法,也就是wait是针对于对象而言,而每个对象都有自己的monitor锁,访问操作这个对象首先要获得monitor锁,而且也由于wait()操作会放弃对cpu的占用,所以想要唤醒某个线程,必要要获取对象的锁,也就是说要获取synchronized,所以wait() 和 notify() 必须要写在同一个对象的synchronized代码块中。

C 0条回复 评论

帖子还没人回复快来抢沙发