volatile是java虚拟机提供的轻量级的同步机制
1.保证可见性
2.不保证原子性
3.禁止指令重排
1.保证可见性
多线程下的JMM(java内存模型)
java 创建一个新的对象,存放在主内存中,假设有三个线程操作Stu这个对象,
每个线程都会将将主物理内存中的对象拷贝到自己的工作内存中,
线程1在本地内存修改以后,将值写回主物理内存,此时其他线程并不知道主物理内存的值已经被修改.
说明:当变量被volatile修饰以后,变量值被修改以后,其他线程可以及时得到通知,拿到最新的变量值.
2.不保证原子性
线程之间通信存在时间差,可能出现写覆盖,导致不保证原子性.
如何解决:
3.禁止指令重排