Java synchronize method与synchronize block的不同
来源:互联网 发布:詹姆斯季后赛数据统计 编辑:程序博客网 时间:2024/06/03 20:46
在学习并发安全编程时,无意发现了一遍关于同步的文章,现记录下来。
package others;public class CP { private int i = 0; public synchronized int synchronizedMethodGet() { return i; } public int synchronizedBlockGet() { synchronized (this) { return i; } }}
上面的类中有两个同步方法,从功能上来说两种方法没有差别,都可以保证数据的原子性。但是从性能上来说,同步方法要比同步块更快一些。通过查看这两个方法所产生的字节码文件进行对比:
D:\Workspaces\test\java_concurrent\bin\others>javap -c CPCompiled from "CP.java"public class others.CP { public others.CP(); Code: 0: aload_0 1: invokespecial #10 // Method java/lang/Object."<init>":()V 4: aload_0 5: iconst_0 6: putfield #12 // Field i:I 9: return public synchronized int synchronizedMethodGet(); Code: 0: aload_0 1: getfield #12 // Field i:I 4: ireturn public int synchronizedBlockGet(); Code: 0: aload_0 1: dup 2: astore_1 3: monitorenter 4: aload_0 5: getfield #12 // Field i:I 8: aload_1 9: monitorexit 10: ireturn 11: aload_1 12: monitorexit 13: athrow Exception table: from to target type 4 10 11 any 11 13 11 any}
从字节码文件中可以看出,同步代码块比同步方法生成更多的字节文件,而且还生成了Exception table;并且注意查看class文件,在synchronizedBlockGet下有3: monitorenter、9: monitorexit、12: monitorexit有同步监视器的显示进入进出,所以这些操作消耗了部分资源,即同步快性能更差一些。
0 0
- Java synchronize method与synchronize block的不同
- java同步机制:使用synchronize block,还是使用synchronize method
- Java synchronize 与 static synchronize 方式对比
- synchronize
- java synchronize
- synchronize java
- Synchronize 与 JAVA 内存模型
- Synchronize 与 JAVA 内存模型
- Synchronize与JAVA内存模型
- java的同步机制synchronize
- java的 violate 和 synchronize
- java中synchronize的总结
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- java 深入研究Synchronize 和 Lock 的区别与用法
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- slidingMenu Android测量框架的使用
- 斐波那契数列的递归方法和用数组保存中间值方法
- 回调函数
- CString 用法大全
- 开启安卓世界的大门(二)
- Java synchronize method与synchronize block的不同
- delphi中 socket 心跳包的实现
- 初识Volley框架
- 关于行锁等待问题的理解
- 1068. Find More Coins (30)
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- 将一个登陆的Activity转类为一个dialog弹窗
- Android AppBarLayout以及ToolBar去除阴影
- JDK版本错误:Unsupported major.minor version 51.0