JMM
内存模型:Java Memory Model
问题:并发过程中如何处理可见性 原子性和有序性问题
并发编程中两个关键问题:
线程之前如何通信
- 共享内存 - 隐式通信
- 消息传递 - 显式通信
线程之间如何同步
- 在共享内存的并发模型中,同步是显式的;synchronized
- 在消息传递的并发模型中,由于消息发送必须在消息接收之前,所以同步时隐式
定位内存可见性问题
什么对象是内存共享的,什么不是
synchronized: 可重入锁 互斥性 可见性
synchronized.jpg
Volatile: 可以做到原子性 可见性;不能做到复合操作的原子性;i++
Volatile int x = 0;
- 对于声明了Volatile的变量进行写操作的时候,JVM会像处理器发送一条Lock前缀的指令。会把这个变量所在的缓存行的数据写回到系统内存
-
对于多处理器的情况下,保证各个处理器缓存一致性的特点,就会实现缓存一致性协议
JMM.jpg
网友评论