volatile修饰的变量有两个特点
- 线程中修改了自己工作内存中的副本后,立即将其刷新到主内存
- 工作内存中每次读取共享变量时,都会去主内存中重新读取,然后拷贝到工作内存
内存 -> CPU Cache -> CPU
如果没有volatile那么就会继续读取缓存,达不到实时读取内存数据的效果,举个栗子,A线程修改了变量a为false,因为B线程之前已经读取了a为true,现在缓存里面的a为true,没有人通知B线程,B线程读不到最新的数据,也有可能A线程修改的数据还在A线程的缓存中,没有刷新到内存。