Java中实例方法同步的等效代码

Java中实例方法同步的等效代码,第1张

Java中实例方法同步的等效代码

尽管我测试过的编译器(Java 1.6.0_07和Eclipse 3.4)生成了不同的字节码,但它们在功能上是等效的。第一个生成:

// access flags 33public synchronized someMethod()V  RETURN

第二个生成:

// access flags 1public someMethod()V  ALOAD 0  DUP  MonITORENTER  MonITOREXIT  RETURN

(感谢ASM进行字节码打印)。

因此,它们之间的差异一直保持到字节码级别,并且取决于JVM是否使它们的行为相同。但是,它们确实具有相同的功能效果-
请参阅Java语言规范中的示例。

应该注意的是,如果该方法在子类中被覆盖,则它不一定是同步的-因此在这方面也没有区别。

我还运行了一个测试来阻止尝试访问监视器的线程,以比较它们在线程转储中的堆栈跟踪情况,它们都包含有问题的方法,因此两者之间也没有区别。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5620205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存