Rol*_*all 1 java concurrency map
我对以下引用的最后一点不太清楚:
检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠.检索反映了最近完成的更新操作的结果.对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目.
为什么只有一些条目?
必须一起阅读第一部分和最后部分才有意义.打破它,我们得到:
现在,考虑一下putAll(这是ConcurrentHashMap.java源)的情况:
for (Map.Entry<? extends K, ? extends V> e : m.entrySet())
put(e.getKey(), e.getValue());
Run Code Online (Sandbox Code Playgroud)
请注意,它会在循环中将每个条目添加到地图中.如果您putAll使用100个条目进行调用,并且有50%的时间通过,则另一个线程会尝试get从地图中获取值,此时只有50个条目putAll可用.
具体来说:文档没有通知您特定条目将不可用,只是在您调用另一个线程之前可能无法完成整个聚合操作get,因为它们彼此不同步.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |