synchorinzed作用域反编译出来的一点东西

synchronized可以作用在方法上,也可以作用在代码块上,而从编译角度来说,这两者是有所区别的。
如果作用在方法上,对对应的class文件使用javap进行反编译是这样的:
在这里插入图片描述
对应方法的标记位上有ACC_SYNCHRONIZED的标记,JVM是通过这个标记来识别这是一个synchronized方法

而如果作用在代码块上,反编译后发现,有一个monitorenter指令来控制线程进入同步代码块,对应的也有一个monitorexit指令来控制线程退出同步代码块。
在这里插入图片描述
这是它们的区别。

再加一个小彩蛋吧,整理一下回答cas的思路:
cas就是compareAndSwap,比较并替换,其实它的核心思想非常简单,就是维护了三个值:。。。。
cas它只是一种思想,操作系统就对这种思想进行了实现,从汇编角度来说,cas对应一个叫做cmpxchg的汇编指令,这个指令是cpu原语嘛,所以从操作系统角度就能保证这个比较并替换的操作是一个原子操作。
cas在java中的实现:atomic->unsafe->openjdk上的c++类,调用了cmpxchg这个汇编指令来完成比较并替换的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值