一.了解volatile工作原理
volatile在工作时涉及到三个储存部分分别是主内存,高速缓存,以及寄存器。
这三者的读取数据关系为:
假设现在变量a 被volatile关键字修饰 且初始值为1
此时进行修改值的操作 a=a+1;
对于一个线程来说 他将操作的步骤为 取值 [a=1] ----- 计算[a+1] ---- 存值[a=2]
操作完存值的步骤后,立即将其他线程中的高速缓存,也就是工作内存设为失效,当其他线程要对变量a进行操作的时候 取到的值 便是来自于主内存。
由上图可知要对一个值进行修改,需要三步
在多线程情况下,会出现如下情况:
线程A--------------------------------------------------------------------------------------------------
线程A---------------① a=1
q切换线程B--------------------------------------------------------------------------------------------------
线程B---------------① a=1
线程B---------------② a=1+1=2
线程B----------