我不是在寻找obj = P(owner[:spec])
,HashMap
或Collections.synchronizedMap(Map)
等各种数据结构之间的差异。 SO 充满了这样的帖子。
我也知道如果另一个编写者线程修改了地图,ConcurrentHashMap将不会为读者线程抛出HashTable
。
当读者线程负担得起陈旧数据时,我正在寻找的实际情况是什么?
即,假设线程1在线程中的时间T1获得ConcurrentModificationException
,然后在稍后的时间T2,插入元素以由另一个线程线程2映射。 Iterator
表示thread-1不能保证看到更新的数据,所以我猜它会不断迭代过时的数据。
有人可以指出具体问题吗?比如在实现缓存,多线程Web服务等或您自己的实际经验中遇到的问题?
我遇到的所有问题总是需要更新数据视图,因为这是将数据插入地图的全部目的,以便读者可以处理更新的数据,或者,同步地图不适合的问题是什么?
从理论上讲,一切看起来都不错,但我的好奇心已经出现,因为我从未在日常工作中遇到任何这样的场景,读者可以负担得起陈旧观点。
答案 0 :(得分:2)
一般情况下 - 极少数情况下,您不需要确切的数据,但同时也负担不起。一个经常被引用的例子是"喜欢"一个帖子 - 没有人关心它是2564还是2565,但" + 1"必须非常快。