#Volatile关键字
前言 不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 缓存可见性 , 指令有序性, 不保证原子性 内存可见性 由于 Java 内存模型( JMM )规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。 线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存中的数据,之后再将更新之后的数据刷新到主内存中。 这里所提到的主内存可以简单认为是 堆内存 ,而工作内存则可以认为是 栈内存 。 所以在并发运行时可能会出现线程 B 所读取到的数据是线程 A 更新之前的数据。显然这肯定是会出问题的,因此 volatile 的作用出现了: 当一个变量被 volatile 修饰时,任何线程对它的写操作都会立即刷新到主内存中,并且会强制让缓存了该变量的线程中的数据清空,必须从主内存重新读取最新数据。 volatile 修饰之后并不是让线程直接从主内存中获取数据,依然需要将变量拷贝到工作内存中 。 1. 可见性问题来源 package com.spring.master.demo.volatiles; /** * @author Huan Lee * @version 1.0 * @date 2020-10-10 15:48 * @describtion 业精于勤