volatile表明两个或多个变量必须同步地发生变化
volatile用于修饰变量,常用于多线程环境,使用了volatile,就会告诉编译器,这个变量可能会被多个线程同时访问
在多线程编程中,每个线程都有自己的工作内存,用于存储变量的副本。当一个线程修改了某个变量的值时,这个变量在其它线程的工作内存中可能仍然是旧值。为了确保每个线程都能读取到最新的值,需要使用volatile。
volatitle的特性:
可见性:一个线程修改了volatile变量的值,对于其他线程是可见的。也就是说,当一个线程修改了volatile变量的值,其他线程将立即知道该变量的新值。
原子性:volatile变量的读写操作都是原子的。即使在多个线程同时对volatile变量进行读写操作,也不会发生竞争和冲突,保证了操作的原子性。
有序性:禁止指令重排序,保证程序的执行顺序
volatile如何实现可见性和原子性?
-
当写入一个volatile变量时,工作内存的变量值会立即刷新到主内存中
-
当读取一个volatile变量时,会将工作内存的设置无效,立马取主内存中的变量值