我来告诉大家什么是volatile关键字
哈希塞特 2019-01-23 10:22:11 百度:
1.内存可见性;
2.禁止指令重排序。
这么底层的专业解释谁能看得懂?
换个思路:
redis应该大部分人都用过,当一个查询很频繁的时候,可以把数据缓存到redis,
这样查询直接走缓存,不查数据库了。
当你修改了数据库记录后,会造成与redis中的数据不一致,这就需要在你修改
数据库的同时,要么同时更新缓存,要么直接把缓存清空,下次查询会自动同步缓存。
再来看看volatile:
cpu正常情况下不和内存交互而是和高速缓存打交道,这里内存就相当于宏观上的数据库,
高速缓存就相当于宏观上的redis。
java中,volatile修饰的变量被某个线程改变后,需要将新值强制写回主存(JMM主存
就认为是内存,当然物理上对应关系很复杂),这就相当于数据库的记录改变了,而缓存
中的数据仍然是旧数据,不一致了怎么办?要么同步要么清空,把cpu高速缓存数据同步
估计没有厂商会这么干,那就直接清空缓存吧!对,volatile就是干这个事的。
高速缓存一般有3级,有的是两级。一般前两级在cpu内部,后一级在外部,应该在主板上。