volatile和synchronized底层原理

先来看 JMM

java  memory model  java 内存模型

主要围绕:原子性,可见性,有序性。

A  B  线程交互 必须经过主内存,这就存在可见性问题,volatile就是解决可见性的

volatile会强制将数据刷新到主内存,并是工作内存失效。

1.对于生明了volatile的变量,进行写操作的时候,JVM会向处理器发送一条lock前缀的指令,

会把这个变量所有缓存行的数据刷新到主内存,

2.多处理器会保证缓存一致性,使工作内存失效,重新读取主内存内容。


volatile和synchronized底层原理_第1张图片

synchronized:可重入锁,互斥性,可见性,

找到class文件 javap -v  *.class

synchronized  底层使用的 moitor机制,进入对象之前 加锁,出来解锁。异常情况自动解锁(出队列)


volatile和synchronized底层原理_第2张图片

你可能感兴趣的:(volatile和synchronized底层原理)