1,volatile的作用
volatile是一个轻量级的线程同步机制。它的特性之一,是保证了变量在线程之间的可见性。
所谓的可见性是指当一个线程修改了变量的值之后,其他线程可以感知到该变化。
为什么会有可见性问题?
是因为由于硬件速度的不同,CPU的速度要明显快于主内存。
所以为了解决速度不匹配的问题,在CPU到主内存之间就会有多级的缓存。
那么这个时候就会发生,一个线程修改了数据,数据还没有及时刷到主内存,那么其他线程读取到的数据就依然还是旧的,这就是可见性问题发生的根源。
通过给变量设置volatile关键字修饰,可以保证变量在线程修改完之后,会刷新到共享内存,这样其他线程就可以读取到最新的内容
volatile保证了在多个线程之间是可见的,但不能保证原子性操作。
2,volatile vs synchronized
synchronized也是保证了线程的可见性,同时也具备了多线程之间的互斥性
3,如何使用volatile ?
直接修饰变量即可
private volatile int count;
4,volatile底层实现原理
当变量被声明为volatile后,线程每次都会都从主内存去读取,而不是读取自己的工作内存,这样就实现了线程之间的可见性
![9491d83aa898c162a262fe01a292086d.png](https://img-blog.csdnimg.cn/img_convert/9491d83aa898c162a262fe01a292086d.png)