volatile 关键字解决了什么问题,它的实现原理是什么?
volatile
能保证 Java 中的内存可见性。 可见性的意思是:当线程A修改共享变量的值后,线程B能立刻读到这个修改后的值。
Volatile
不会引起线程上下文的切换和调度,如果使用的恰当,会比 Synchronized
执行成本更低。
# Java中的内存可见性
可见性:一个线程对共享变量值的修改,能够及时被其他线程看到。
共享变量:如果一个变量在多个线程的工作内存中都存在副本,那这个变量就是这几个线程的共享变量。
Java内存的规定:
-线程对共享变量的所有操作都必须在自己的工作内存中进行,不可直接从主内存中读写; -不同线程之间无法直接访问其他线程工作内存中的变量,线程间的变量值的传递需要通过主内存。
# Volatile
的实现原理
如果对用 Volatile
修饰的变量写操作,JVM
会向处理器发出一条 Lock
前缀的指令,Lock
前缀的指令在多核处理器下会引发两件事情:
将当前处理器缓存行的数据写会到系统内存
这个写会内存的操作会使其他缓存中的该内存地址的数据无效
编辑 (opens new window)
上次更新: 2022/05/19, 21:26:01