volatile关键字修饰的变量表示随时都有可能会改变,作用是防止被volatile关键字修饰的变量被编译器做优化处理,直接从在内存中读取定义该变量物理地址的值,而不是从该变量在寄存器中的备份里面去读取
具体如下:
当定义了一个未被该关键字修饰的变量时,第一次从内存中读取到寄存器后,会做一个备份处理,因为对于CPU来说,RAM上的读取速度慢于寄存器,当程序中两条指令都使用了该变量,但未对变量做什么操作,此时优化器就会把该变量的同一个值,给到这两条指令,但此时如果在这两条指令之间,当其他线程对该变量又做了相应的改变时,导致应用程序读取的值和实际的值不一致,就会产生错误