我想澄清一些关于ConcurrentHashMap vs ConcurrentSkipListMap的API文档。ConcurrentHashMap vs ConcurrentSkipListMap澄清
从我的理解ConcurrentHashMap gaurantees线程安全的多线程插入。所以如果你有一个只能被多个线程并发填充的地图,那么就没有问题了。然而,API继续建议它不保证检索的锁定,所以你可能会在这里得到误导结果?
相比之下,ConcurrentSkipListMap声明:“插入,删除,更新和访问操作安全地由多个线程同时执行”。所以我认为这没有前面提到的哈希映射的检索问题,但显然这通常会带来性能成本?
实际上,有没有人发现需要使用ConcurrentSkipListMap是因为这种特殊的行为,或者一般来说没有关系,检索可能会提供过时的视图?
如果您想要获取最新的副本,那么您通常会如何处理这个问题 - 有没有办法使用不同的数据结构,或者使用ConcurrentHashMap来处理阻塞? – Tranquility
实际上,在所有情况下'ConcurrentHashMap'就够了。对我来说,更新意味着能够看到完整的更新 - 而且它在'ConcurrentHashMap'中是如此。但是如果你想在put开始时立即阻止所有的地图获取,那么你有一些额外的同步。您可以使用效率低下的Collections.synchronizedMap()或者具有相应关联的ReadWriteLocks的严格大小的HashMap数组(像ConcurrentHashMap中的段)。请注意,这种阻塞几乎总是不必要的,并会影响性能。真诚的我无法想象什么时候你需要它。 – dezhik