ConcurrentHashMap
在 Java 中提供读取以与更新同时进行。这样做的权衡是读取的结果仅限于反映读取开始时最后完成的更新,因此未指定反映元素的最新状态。
但是 AFAIK Java 内存模型,如果在读写线程之间没有某种形式的同步,即使经过任意时间,写线程的更新也可能对读线程不可见。
鉴于读取线程不会与写入线程阻塞,那么保证读取线程可用的最后完成更新的可见性的基础是什么?
我只能想到比较和交换算法在起作用,但我无法在该库的源代码中验证它。
ConcurrentHashMap
在 Java 中提供读取以与更新同时进行。这样做的权衡是读取的结果仅限于反映读取开始时最后完成的更新,因此未指定反映元素的最新状态。
但是 AFAIK Java 内存模型,如果在读写线程之间没有某种形式的同步,即使经过任意时间,写线程的更新也可能对读线程不可见。
鉴于读取线程不会与写入线程阻塞,那么保证读取线程可用的最后完成更新的可见性的基础是什么?
我只能想到比较和交换算法在起作用,但我无法在该库的源代码中验证它。