可见性,并非原子的
写入volatile变量会直接写入主内存
不加volatile,cpu会从缓存中读取值,而不是主内存中读取。因为工作内存(缓存)和主内存的交互的时间(1微秒)足够cpu执行3000条左右的指令。
从volateile 变量读取会直接读取主内存
非常弱的同步机制
禁止指令重排
编译器和处理器都可能堆指令进行重排,导致问题
// 指令重排, 为了效率编译器可能会先 执行最后一条指令,在执行第二条,这就是指令重排
int a = 1;
a++;
int b = 2;