文章目录
volatile关键字干了什么?什么叫指令重排?
一、volatile关键字干了什么?
volatile
关键字在 Java 中用于声明变量,其作用主要有两个方面:
- 保证变量的可见性
- 禁止指令重排序
1. 保证变量的可见性
可见性
是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果,另一个线程马上就能看到。
当一个变量被声明为 volatile
后,所有线程都能够看到该变量的最新值,即使它们位于不同的线程内。
当对非volatile变量
进行读写的时候,每个线程
先从主内存
拷贝变量
到CPU缓存
中,如果计算机有多个CPU
,每个线程可能在不同的CPU
上被处理,这意味着每个线程
可以拷贝到不同的CPU cache
中。
volatile变量
会强制将修改后的值立即写回主内存,并且从主内存读取