java - ConcurrentHashMap 有什么缺点吗?

标签 java multithreading hashmap concurrenthashmap java.util.concurrent

我需要一个可从多个线程访问的 HashMap。

有两个简单的选项,使用普通的 HashMap 并在其上同步或使用 ConcurrentHashMap。

由于 ConcurrentHashMap 不会阻塞读取操作,因此它似乎更适合我的需求(几乎完全读取,几乎从不更新)。 另一方面,无论如何我都希望并发性非常低,所以应该没有阻塞(只是管理锁的成本)。

map 也将非常小(少于 10 个条目),如果这有所不同的话。

与常规 HashMap 相比,读取和写入操作的成本要高多少(我假设它们是)?或者,无论读取/更新比率和大小如何,即使存在中等级别的并发访问,ConcurrentHashMap 是否总是更好?

最佳答案

On the other hand, I expect very low concurrency anyway, so there should be no blocking (just the cost of managing the lock).

获取和释放 uncontend Java 互斥锁(原始锁)的成本微乎其微。因此,如果您认为争用的可能性非常低,那么简单的 HashMap 可能是您最好的选择。

但这都是推测。除非并且直到您真正分析了您的应用程序,否则花在推测优化上的所有时间很可能 (*) 是浪费时间。

* ... 除非您的直觉真的很好。

关于java - ConcurrentHashMap 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3951676/

相关文章:

java - 拍照并命名

java - 带有列表和 putIfAbsent 的通用 HashMap

java - mac上设置java环境变量失败

objective-c - NSOperation : how to pause and resume 操作

java - Android 服务每 10 秒运行一次就会出现 ANR 消息

windows - 如果线程在临界区内死亡会发生什么?

java - 如何将 HashMap 插入到对象数组中

java - list.clear() 也向后工作吗?

java - 创建新对象时使用字符串作为标识符

java - 可以使用嵌入式 jetty 以编程方式设置上下文阀和 Realm 吗?