volatile内存语义
volatile是Java虚拟机提供的轻量级的同步机制。volatile关键字有如下两个作用
- 保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一
个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。 - 禁止指令重排序优化。
volatile的可见性 关于volatile的可见性作用,我们必须意识到被volatile修饰的变量对所有线程总数立即可 见的,对volatile变量的所有写操作总是能立刻反应到其他线程中。
volatile禁止重排优化 volatile关键字另一个作用就是禁止指令重排优化,从而避免多线程环境下程序出现乱序 执行的现象,关于指令重排优化前面已详细分析过,这里主要简单说明一下volatile是如何实 现禁止指令重排优化的。先了解一个概念,内存屏障(Memory Barrier)。
内存屏障 内存屏障,又称内存栅栏,是一个CPU指令,它的作用有两个,一是保证特定操作的执行 顺序,二是保证某些变量的内存可见性(利用该特性实现volatile的内存可见性)。由于编译 器和处理器都能执行指令重排优化。
内存屏障的具体屏蔽的规则(使用过程中一般都是需要禁止重排的对象全都加volatile,不会搞的这么细)
详细的规则查看此文档
|