JAVA中volatile关键字
1.定义
volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一样的。以及对任意单个volatile变量的读写具有原子性,但类似volatile++这种复合操作不具有原子性。
2.实现原理
可见性:
对于声明了volatile的变量进行写操作,jvm就会向处理器发送一条lock前缀的指令
1.lock前缀指令会引起处理器缓存回写到内存
2.一个处理器的缓存回写到内存会导致其他处理器的缓存无效
原子性:
为了实现volatile的内存语义,编译器在生成字节码时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序
1.在每个volatile写操作的前面插入一个StoreStore屏障
2.在每个写操作的后面插入一个StoreLoad屏障
3.在每个volatile读操作的后面插入一个LoadLoad屏障
4.在每个volatile读操作的后面插入一个LoadStore屏障
上述内存屏障插入策略可以保证在任意处理器平台,任意的程序中都能得到正确的volatile内存语义。

浙公网安备 33010602011771号