字节码技术-Synchronized

Synchronized:对对象进行加锁操作

public class Demo5 {
	public static void main(String[] args) {
		int i = 10;
		Lock lock = new Lock();
		synchronized (lock) {
			System.out.println(i);
		}
	}
}

class Lock{}

对应的字节码:

Code:

        stack=2, locals=5, args_size=1

                0:  new   #2                          //new Object       

                3: dup                                  //复制一份,放到操作数栈顶,用于构造函数消耗

                4: invokespecial   #1           // Method com/nyima/JVM/day06/Lock."<init>":()V

                7: astore_1                          //剩下的一份放到局部变量表的1号位置,赋值给lock

                8: aload_1                           //lock对象的引用加载到操作数栈 (Synchronized开始)

                9: dup                                  //复制lock对象的引用,用于加锁和解锁

                10:astore_2                        //lock对象的引用加载到2号槽位

                11: monitorenter                 //对lock引用所指向的对象加锁,消耗一个lock引用

                12: getstatic   #3                 // Field java/lang/System.out:Ljava/io/PrintStream;

                15:ldc   #4   

                17: invokevirtual #5            // Method java/io/PrintStream.println:(I)V 

                20: aload_2                         //2号槽位的lock对象的引用加载到操作数栈

                21: monitorexit                    //解锁

                22: goto   30 

                25: astore_3                        //将异常对象的引用存入slot 3槽位

                26: aload_2                         //2号槽位的lock对象的引用加载到操作数栈

                27: monitorexit                    //解锁

                31: aload_3 

                33: athrow

                34: return //可以看出,无论何时出现异常,都会跳转到25行,将异常放入局部变量中,并进行解锁操作,然后加载异常并抛出异常。

Exception table:

from to target type

12    22   25    any

25    28   25    any

方法级别的Synchronized不会在字节码指令中体现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值