作者回复: 我们知道Node<k,v>以及Node<k,v>的value是volatile修饰的,所以在一个线程对其进行修改后,另一个线程可以马上看到。
如果是一个新Node,那么就不能马上看到,虽然Node的数组table被volatile修饰,但是这样只是代表table的引用地址如果被修改,其他线程可以立马看到,并不代表table里的数据被修改立马可以看到。
作者回复: 也会的,线程安全除了要保证可见性,还需要保证原子性、有序性。
作者回复: 平时善于做笔记,除此之外,尝试将自己学到的知识点分享给其他人。
作者回复: 顺序一致性是指单个线程的执行的顺序性,强一致性则指的是多个线程在全局时钟下的执行的顺序性。
作者回复: L1\L2\L3三个缓存的作用和实现的技术是不一样的,L1的内存大小是非常有限的,所以很多时候在L1获取缓存数据的命中率非常低。为了提高CPU读取的速率,在L1没有命中的缓存,可以进入到L2进行获取,L2的容量要比L1大,但离CPU核心更远。但还是能提高CPU读取缓存数据的速率。
作者回复: 对的,volatile除了可以保证变量的可见性,可以阻止局部指令重排序。
作者回复: 是的
作者回复: 收到,谢谢提醒
作者回复: 获取节点时是通过key值获取,并不一定通过next获取,所以不能代表对应key值中的value是最新的
作者回复: mark
作者回复: 坚持看英文文档,到最后你就能流利的读任何英文文档说明了
作者回复: cas+volatile可以解决单个变量的强一致性问题。
作者回复: 指令重排序不一定是由于共享变量导致的,这块需要结合具体的场景分析。
作者回复: 这里只是假设,有专门一个指令重排序的例子。
作者回复: 子类会继承父类的private属性,但子类无法直接访问到private属性;
子类创建时,不会创建一个父类对象的,只是调用了父类的构造函数初始化而已。
作者回复: 会有重排序问题