变量存储在主存中,每个线程的工作内存中有此变量副本,经过save()、load()完成读写操作。
理论写的不错,借鉴。
使用volatile和原生的区别
因为在Java内存模型中规定,所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了被线程使用到的变量的主内存副本拷贝,线程对变量的操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。线程与内存交互如下图所示
但是如果你对声明了volatile的变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个缓存行的数据写回内存。而在读取一个volatile类型的变量时,不会从线程私有数据栈中取得变量的值,而是强制从公共堆栈中取得变量的值。
操作volatile变量如下图所示