Synchronized底层原理(简易版)

简介

synchronized关键字是解决多线程之间访问资源的同步性,也叫同步锁(悲观锁思想)

废话不多说,直接上例子!!

例子

  • synchronized放在方法体内部

源代码:

public void fun1(){
    synchronized (this){
        System.out.println("fun111111111111111111111111");
    }
}

经过编译和反编译之后结果如下(显示获取、释放锁):
image.png
monitorenter:代表监视器入口,获取锁
monitorexit:代表监视器出口,释放锁
monitorexit:第二次monitorexit代表发生异常,释放锁

  • synchronized放在方法名上
public synchronized static void fun2(){
    System.out.println("fun222222222222222222222222222222");
}

public synchronized void fun3(){
    System.out.println("fun3333333333333333333333333333333");
}

经过编译和反编译之后结果如下:
image.png
当synchronized在方法名上时,会进行 flag 同步标识(隐式获取、释放锁)

  • 编译命令:javac 文件名称.java
  • 反编译命令:javap -verbose 文件名称.class

希望对您有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值