Java并发机制的底层实现和原理

volatile的实现原理

volatile修饰的变量的汇编代码

volatile Person p = new Person();
// 汇编伪指令
lock addl $0x0,(%esp)  

lock前缀的指令在多核处理器的作用

【1】将当前处理器高速缓存行内的数据回写到内存中

【2】这个回写内存的操作会将其他CPU里缓存了该内存地址的数据置为失效

synchronized的实现原理

volatile为轻量级的synchronized锁,后者为重量级锁,但是现在也不是那么重了

synchronized实现同步的基础

Java中每一个对象都可以作为锁,表现形式为:

  【1】普通同步方法,锁为当前实例对象

  【2】静态同步方法,锁为当前Class对象

  【3】同步代码块,锁为括号内配置的对象

一个线程进入同步方法或者是同步代码块时必须获得锁,退出同步方法、同步代码块或者是抛出异常时必须释放锁

synchronized实现原理

JVM进入和退出Monitor对象来实现方法同步和代码块同步,任何一个对象都对应一个Monitor对象,同步方法和同步代码块用monitorenter指令和monitorexit指令实现

一个线程执行到monitorenter指令时会尝试获得锁对象对应的Monitor对象的所有权,即获得锁对象对应的锁

方法结束处和异常处有一个monitorexit指令与monitorenter指令相对应,执行到monitorexit指令时会放弃锁对象对应的Monitor对象的所有权,即释放锁对象对应的锁

猜你喜欢

转载自www.cnblogs.com/BINGJJFLY/p/10700793.html