探究synchronized底层原理(基于JAVA8源码分析)
JVM支持方法级和方法内部一段指令序列的同步,都用同步锁(monitor)实现 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入临界区,同时它还可以保证共享变量的内存可见性 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础 1. 普通同步方法,锁是当前实例对象 2. 静态同步方法,锁是当前类的class对象 3. 同步方法块,锁是括号里面的对象 当一个线程访问同步代码块 首先得到锁才能执行同步代码 当退出或者抛异常时必须释放锁 如何来实现这个机制呢? 实现原理 看一段简单的代码 生成的class文件信息 JVM的同步(synchronization)是monitor的进入和退出实现的,无论是显式同步(有明确的monitorenter和monitorexit指令),还是隐式同步(无需通过字节码指令控制,依赖方法调用和返回指令实现) Java中,同步用的最多的可能就是经synchronized修饰的同步方法 同步方法并不是用monitorenter和monitorexit实现的,而是由方法调用指令读取运行时常量池中方法的ACC...