来自 ConcurrentHashMap 的源码
/**
171 * Number of unsynchronized retries in size and containsValue
172 * methods before resorting to locking. This is used to avoid
173 * unbounded retries if tables undergo continuous modification
174 * which would make it impossible to obtain an accurate result.
175 */
176 static final int RETRIES_BEFORE_LOCK = 2;
1.我读过迭代不持有锁,那么上面的语句是什么意思?get之类的操作也可以锁吗?也请提供场景。
2.如果尚未对该元素进行迭代,线程1中运行的更新操作是否对线程2中的迭代可见?(波动性和可见性?)
3.除了更新,还有其他情况需要加锁吗?
4.获取数据时,使用的是volatile read。如果易失性读取导致未命中,则在最后一次尝试成功读取时获得该段的锁定。这是什么意思?什么是易失性读取?