我已阅读有关Java bytecode的文章。 这里同步方法的工作描述为
当存在synchronized方法修饰符时,如top1所示,锁定的获取和后续释放不是使用monitorenter和monitorexit操作码完成的。相反,当JVM调用方法时,它会检查ACC_SYNCHRONIZED属性标志。
与此同时,我正在阅读Brian Goetz' Concurrency in practice',他在那里说
synchronized方法是跨越整个方法体的同步块的简写,其锁定是调用该方法的对象。 (静态同步方法使用Class对象进行锁定。)
因此,第一个来源说在同步方法中没有对对象进行监视,而第二个源是使用对象上的同步方法锁定。 我相信,这两个来源都是正确的,但有人可以形容我,发生了什么?
答案 0 :(得分:4)
Concurrency in Practice的答案说明了实现的行为。第一个版本解释了它是如何实现的。它们在实践中的工作方式完全相同。
因此,第一个来源说没有在同步方法中对对象进行监视
不,它没有。它说显示器采用不同的方式。