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内存语义。

posted @ 2021-01-31 23:59  legalyuke  阅读(100)  评论(0)    收藏  举报