非 volatile修饰:
线程私有.png
volatile 修饰后强制从主内存读取写入和读取数据:
读取公共内存.png
volatile 修饰的变量具有线程可见性,但是不支持原子性。比如多个线程同时使得某个int 变量++, int++是非原子操作,会造成++结果不确定。
1)从内存取出 i 的值。2)计算 i 的值。3)将 i 的值写到内存中。
非 volatile修饰:
volatile 修饰后强制从主内存读取写入和读取数据:
volatile 修饰的变量具有线程可见性,但是不支持原子性。比如多个线程同时使得某个int 变量++, int++是非原子操作,会造成++结果不确定。
1)从内存取出 i 的值。2)计算 i 的值。3)将 i 的值写到内存中。