作用是使得变量在多线程间是可见的,强制从公共数据栈中取得变量的值,而不是从线程私有数据栈中取变量的值。
原理(初步认识):
1.首先实现可见性,需要满足两点,第一点是线程在私有内存中改变变量值后要强制刷新主内存中对应变量的值,第二点是线程在私有内存中操作变量时,其它线程私有内存中的对应变量自动失效,这样这些线程下次访问时会直接从主内存中取值。
2.实现有序性,JMM会对volatile变量限制编译器重排序和处理器重排序,加入volatile关键字会多出lock前缀指令,相当于时内存屏障,它确保前面的指令不会移到内存屏障后面执行,后面的指令也不会移到屏障前面执行,一定程度上保证了操作的有序性。