synchronized底层实现原理
时间:2022-02-22 10:57:43|栏目:JAVA代码|点击: 次
测试类:
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能一定释放锁的机制,一个是方法正常执行完释放,一个是执行过程发生异常时虚拟机释放;
上一篇:spring security动态配置url权限的2种实现方法
栏 目:JAVA代码
本文标题:synchronized底层实现原理
本文地址:http://www.codeinn.net/misctech/194225.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




