java synchronized方法是否在对象上同步或使用标志

时间:2016-02-23 22:47:11

标签: java multithreading synchronization

我已阅读有关Java bytecode的文章。 这里同步方法的工作描述为

  

当存在synchronized方法修饰符时,如top1所示,锁定的获取和后续释放不是使用monitorenter和monitorexit操作码完成的。相反,当JVM调用方法时,它会检查ACC_SYNCHRONIZED属性标志。

与此同时,我正在阅读Brian Goetz' Concurrency in practice',他在那里说

  

synchronized方法是跨越整个方法体的同步块的简写,其锁定是调用该方法的对象。 (静态同步方法使用Class对象进行锁定。)

因此,第一个来源说在同步方法中没有对对象进行监视,而第二个源是使用对象上的同步方法锁定。 我相信,这两个来源都是正确的,但有人可以形容我,发生了什么?

1 个答案:

答案 0 :(得分:4)

Concurrency in Practice的答案说明了实现的行为。第一个版本解释了它是如何实现的。它们在实践中的工作方式完全相同。

  

因此,第一个来源说没有在同步方法中对对象进行监视

不,它没有。它说显示器采用不同的方式。