java并发编程synchronized底层实现原理
【java并发编程synchronized底层实现原理】首先那些说看过synchronized源码的基本都是大聪明,synchronized根本点不进去,想弄懂它的实现原理,我们只能通过看编译好的字节码文件
整个测试类
public class SynchronizedTest {public void get() {synchronized (this) {System.out.println("小张你好鸭!"); }}}
字节码文件(怎么看?? idea => view => Show ByteCode)
文章图片
再来说原理 基于对象的监视器(ObjectMonitor),我们在字节码文件里面可以看到,在同步方法执行前后,有两个指令,进入同步方法前monitorenter,方法执行完成后monitorexit;
我的理解是对象都有一个监视器ObjectMonitor,这个监视器内部有很多属性,比如当前等待线程数、计数器、当前所属线程等;其中计数器属性就是用来记录是否已被线程占有,方法执行到monitorenter时,计数器+1,执行到monitorexit时,计数器-1,线程就是通过这个计数器来判断当前锁对象是否已被占用(0为未占用,此时可以获取锁);
补充:一个synchronize锁会有两个monitorexit,这是保证synchronize能一定释放锁的机制,一个是方法正常执行完释放,一个是执行过程发生异常时虚拟机释放;
以上就是java并发编程synchronized底层实现原理的详细内容,更多关于synchronized底层原理的资料请关注脚本之家其它相关文章!
推荐阅读
- Java|Java synchronized底层实现原理以及锁优化
- Java的内部类总结
- java|Meta元宇宙OS要黄(300人研发团队解散,关闭VR/AR操作系统研发)
- java运行时添加枚举值,尝试在Java的运行时从枚举中获取关联的值
- 为什么java首次运行慢_第一次Java循环运行缓慢,为什么([Sun HotSpot 1.5,sparc])
- java操作es聚合操作并显示其他字段_javaAPI操作ES分组聚合
- java怎么创建日期_用户如何在我的日历(java)中创建日期()
- star法则java简历_在简历中使用STAR法则
- java|改名Meta俩月,脸书放弃虚拟现实操作系统(负责人跳槽谷歌)
- GWA2 Java 增加多线程数据共享通道 globalData