我不是在寻找各种数据结构之间的差异,比如HashMap
、Collection. synizedMap(Map)
或HashTable
。SO充满了这样的帖子。
我还知道,如果另一个编写器线程修改了映射,ConloctHashMap不会为阅读器线程抛出ConloctModificationException
。
当一个读取线程能够处理陈旧的数据时,我在寻找什么实际场景?
也就是说,假设thread-1在时间T1在一个线程中得到一个迭代器
,然后在稍后的时间T2,一个元素被另一个线程thread-2插入到映射中。并发HashMap
说thread-1不能保证看到更新的数据,所以我猜它一直在迭代陈旧的数据。
有人能告诉我具体的问题吗?比如在实现缓存、多线程Web服务等方面,或者你自己的实践经验中的问题??
我遇到的所有问题总是需要更新数据视图,因为这是将数据插入地图的全部目的,以便读者可以处理更新的数据,或者,同步地图不适合的问题是什么?
理论上看起来都不错,但我的好奇心产生了,因为在我的日常工作中,我从未遇到过读者可以负担得起陈旧观点的情况。
一般来说——在极少数情况下,你不需要确切的数据,同时又负担不起。一个经常被引用的例子是帖子的“喜欢”数量——没有人关心它是2564还是2565,但是“1”一定很快。