走向人生巅峰的大路

走向人生巅峰的大路

经过一闪而过的一个灵感,记下来,我觉得缓存的定义应该是这样定义的:

我之前一直认为缓存的词义是错误的:是在读取到值之后,再次被使用的时候,不会去取新的值,而是使用旧的值,这是是错误的。
应该是在【读取到当时的值的那一刻起】至返回给程序使用(因为读取就是要用,不然干嘛要读)的这个间段,然后再加上下一次被重新调用时去【读取到值的那一刻起】的这个时间段,都应该称为缓存!!!!!,因为在这段时间,当前线程不会再更新这个值。

举个例子:比如A和B两个线程,现在A和B线程中的值都是"T",然后,A线程改了值为"T1",如果B接下来的代码逻辑中没有用到,那么B的缓存中肯定还是"T"(在读取到值的那一刻起至下一次重新调用读取到值的那一刻起,这期间都应该称为缓存);
再然后,现在B要重新去读了,但是A线程在B线程开始去读取至读取到值后的过程又改成了"T2",按理来说,现在B该读取到的值应该是"T2",但是cpu很调皮,它想调哪个线程就调哪个线程,它还继续运行A线程,A线程又改成了"T3",然后才运行B线程,那么此时,B线程读取到的值就是"T3".  在B线程读取到T3前,它的缓存一直是T。

从这个例子我们应该能推理出导致这样的原因,就是【去读和读取到】有时间间隙,【去写和写成功后】也有时间间隙,再加上CPU的随机调用,才导致的缓存不一致,其实说白了就是【读和写不同步】,---->怎么解决呢,synchronized和volatile,具体请自行学习。

10-21 05:57