Java内存模型(JMM)与volatile关键字

    技术2022-07-15  42

    Java内存模型结构图

    Java线程内存模型与CPU缓存模型类似,是基于CPU缓存模型建立的,Java线程内存模型是标准化的屏蔽了底层不同计算机的区别

    JMM数据原子操作

    1、read(读取):从主内存中读取数据 2、load(载入):将主内存读取的数据载入到工作内存 3、user(使用):从工作内存中读取数据来计算 4、assign(赋值):将计算的所得数据重新赋值到工作内存 5、store(存储):将工作内存中数据写入主内存 6、write(写入):将store过来的变量值赋值给主内存中的变量 7、lock(锁定):将主内存变量加锁,标示为线程独占状态 8、unlock(解锁):将主内存变量解锁 解锁后其他线程可以锁定变量

    Volatile可见性原理

    1、变量initFlag用volatile关键字修饰,线程1与线程2都从主线程获取到initFlag变量的值为false 2、线程2将工作内存中的initFlag变量修改为true,当线程2将数据写回到主内存时,会将主内存变量加锁 3、当通过系统总线时,其他加载了该变量的线程通过CPU线程嗅探机制获知该变量已被修改,就会将本地变量置为无效状态。 4、当主内存赋值完成释放锁后,其他线程就会从主线程中获取最新的值,所有在宏观上,变量initFlag对各个线程是可见的

    Processed: 0.016, SQL: 9