试题
考点

专业课-操作系统-线程/进程-线程相关

面5笔5

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

前往“校招VIP”小程序,刷题更快
最新校招难题刷题,快来进刷题群吧
解答

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

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

评论
暂无评论

加载更多