同步方法与同步代码的区别浅解
来源:互联网 发布:北航软件测评中心 编辑:程序博客网 时间:2024/05/29 06:53
当JVM执行一个方法时,执行中的线程识别该方法的method_info结构是否有ACC_SYNCHRONIZED标记设置,然后它自动获取对象的锁,调用方法,最后释放锁。如果有异常发生,线程自动释放锁。
同步化一个方法块会超过JVM对获取对象锁和异常处理的内置支持,要求以字节代码显式写入功能。如果使用同步方法读取一个方法的字节代码,就会看到有十几个额外的操作用于管理这个功能。
Java代码
- public class Sync {
- private int i;
- public synchronized int synchronizedMethodGet() {
- return i;
- }
- public int synchronizedBlockGet() {
- synchronized( this ) {
- return i;
- }
- }
- }
反编译出的字节码:
Java代码
- D:\Java\jdk1.6.0_02\bin>javap -c Sync
- Compiled from "Sync.java"
- public class Sync extends java.lang.Object{
- public Sync();
- Code:
- 0: aload_0
- 1: invokespecial #1; //Method java/lang/Object."":()V
- 4: return
- public synchronized int synchronizedMethodGet();
- Code:
- 0: aload_0
- 1: getfield #2; //Field i:I
- 4: ireturn
- public int synchronizedBlockGet();
- Code:
- 0: aload_0
- 1: dup
- 2: astore_1
- 3: monitorenter
- 4: aload_0
- 5: getfield #2; //Field i:I
- 8: aload_1
- 9: monitorexit
- 10: ireturn
- 11: astore_2
- 12: aload_1
- 13: monitorexit
- 14: aload_2
- 15: athrow
- Exception table:
- from to target type
- 4 10 11 any
- 11 14 11 any
- }
- 同步方法与同步代码的区别浅解
- 同步方法与同步代码块的区别?
- 同步方法与同步代码块的区别
- 同步块与同步方法的区别
- 同步方法与同步块的区别
- 同步块与同步方法的区别
- 同步方法与同步块的区别
- 同步方法与同步块的区别
- 同步代码块,同步方法,同步静态方法,同步非静态方法的区别
- java同步方法和同步代码块的区别
- java同步方法和同步代码块的区别
- java同步代码块和同步方法的区别
- 同步方法和同步代码块的区别是什么
- 多线程---java同步方法和同步代码块的区别
- 同步方法和同步代码块的区别
- 静态同步方法与非静态同步方法的区别
- 锁,同步代码块,同步方法 区别
- java synchronized对象锁与类锁的区别、同步代码块与同步方法的区别
- 新年会
- 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
- HTML(CSS)大图通过坐标获取小图后,小图上的边框怎么去掉?
- aptitude与apt-get常用参数
- 关于AVD无法使用问题
- 同步方法与同步代码的区别浅解
- 临界区问题的产生一
- 利用matlab绘制类似拟合、残差图(需手工合并)
- 如何写英文科技论文 (Unit1 principals of efficient writing)
- 【转载】JDBC配置
- Android交互体验必知:功能按键事件
- 产品经理相关资料和博客
- js 暂停执行
- JAVA在软件开发中可能出现的几个错误观点