我需要一个可从多个线程访问的 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/