volatile关键字的作用以及原理分析
通俗地讲volatile修饰的变量意味着,对变量的地址进行稳定的访问。
1,不稳定的访问是什么
Cpu为了工作的高速,很多时候访问数据都不是去内存里面拿的,更多是将数据放在缓存中,然后下一次又要用到这些数据的时候就可以直接从高速缓存内拿到,这就意味着某些数据可能会出现不一致的问题,也就是如果内存中数据早已改变,但是缓存里面还是存着以前的存的数据。
这就是要用volatile的原因所在了,那就是对于关键的数据,我们想要最可靠的方式去得到他,而不是拿到一个可能过期的数据。
2什么是volatile提供的稳定的访问呢,以下将从底层微机的角度去分析
系统对volatile变量进行操作的时候JVM想处理器发送一条带lock前缀的指令,处理器在接受到lock指令时,会立马将缓存中的数据写回到内存中,并且这个操作过程会采用缓存一致性原则,也叫缓存锁定,来保证修改过程的原子性,他会禁止同时操作两个以上的缓存对应的内存区域的数据。
数据写回之后,其他的处理器里面的缓存这个时候还没有变,但是各个处理器会一直在系统总线上嗅探数据,一旦发现自己的缓存行对应的内存地址被修改,就会把处理器的缓存行设置为,无效状态,当处理器又访问到无效状态的缓存时,会被强制要求从对应的内存中拿最新的数据。
以上就是volatile的一个原理分析了
实习冲刺95天,一只鹅留