synchronized底层实现原理

网友投稿 612 2022-11-04

synchronized底层实现原理

synchronized底层实现原理

测试类:

public class SynchronizedTest {

public void get() {

synchronized (this) {

System.out.println("小张你好鸭!");

}

}

}

字节码文件(怎么看?? idea =&ghttp://t; view => Show ByteCode)

再来说原理:

基于对象的监视器(ObjectMonitor),我们在字节码文件里面可以看到,在同步方法执行前后,有两个指令,进入同步方法前monitorenter,方法执行完成后

monitorexit

我的理解是对象http://都有一个监视器Objehttp://ctMonitor,这个监视器内部有很多属性QnVYHGD,比如当前等待线程数、计数器、当前所属线程等;其中计数器属性就是用来记录是否已被线程占有,方法执行到monitorenter时,计数器+1,执行到monitorexit时,计数器-1,线程就是通过这个计数器来判断当前锁对象是否已被占用(0为未占用,此时可以获取锁);

补充:一个synchronize锁会有两个monitorexit,这是保证synchronize能一定释放锁的机制,一个是方法正常执行完释放,一个是执行过程发生异常时虚拟机释放;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Jupiter是一款性能非常不错的, 轻量级的分布式服务框架
下一篇:IGListKit 一个数据驱动UICollectionView框架用于构建快速和灵活的列表
相关文章

 发表评论

暂时没有评论,来抢沙发吧~