java并发中的volatile的关键字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hzt_fighting_up/article/details/78595812

volitale简单介绍:
轻量级synchronized,保证了在多处理器中共享变量的可见性

volatile实现的内存语义:
当一个线程对一个volatile变量进行写操作时,写操作完后必须立刻刷回内存,并且其他线程缓存区中的值将无效,若对值进行修改必须重新从系统内存中读取。
volatile实现原理:所有的线程最终的执行都是在cpu调度完成的。(runnable–>thread–>kernel—>cpu)jvm将字节码转化为汇编语言在cpu上执行,在cpu上,当对volatile修饰的变量进行写操作时,jvm会向操作系统发送一条会lock前缀的指令。lock前缀的指令在多处理器下会引发两件事:
1):将当前处理器缓存行的数据写回到主内存
2):这个写回内存的操作会使在其他cpu里缓存了该内存地址的数据无效
如何保证缓存数据的一致性:每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存行设置为无效状态。

猜你喜欢

转载自blog.csdn.net/Hzt_fighting_up/article/details/78595812