每个线程都有自己的工作内存,同时还有一个共享的主内存。
多个线程并发读写一个共享变量时,有可能一个线程修改了变量的值,但是其他线程看不到,也就是对其他线程不可见。
当共享变量加了volatile后,只要一个线程修改了这个变量的值,立马强制刷回主内存,接着强制过期其他线程的工作内存中的缓存,当其他线程读取变量值时,强制从主内存加载最新值。
valatile主要作用是保证可见性和有序性,有序性是涉及到复杂的指令重排内存屏障等,volatile是不能保证原子性的,得依赖synchronize、ReentrantLock等加锁机制解决。