【发布时间】:2013-09-05 11:15:18
【问题描述】:
来自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 读取。如果 volatile 读取导致未命中,则在最后一次尝试成功读取时获取该段的锁定。这是什么意思?什么是 volatile 读取?
【问题讨论】:
标签: java multithreading