volatile关键字
volatile关键字
线程A和线程B存在共享数据,当线程A修改了共享数据,B线程没有及时获取到最新的值,如果还在使用原先的值,就会出现问题。
- 堆内存是唯一的,每一个线程都有自己的线程栈
- 每一个线程在使用堆里面变量的时候,都会先拷贝一份到变量的副本中(这里理解为,将变量副本拷贝到每个线程的缓冲区中,每个线程都有自己的数据缓冲区)
- 在线程中,每一次使用是从变量的副本中获取的
Volatile关键字:强制线程每次在使用的时候,都会看一下共享区域最新的值。
volatile关键字可被用来修饰成员变量,具备两层含义:
- 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
- 禁止进行指令重排序。
注意: volatile不能保证原子性。