一尘不染

挥发性HashMap与ConcurrentHashMap

java

我有一个缓存类,其中包含一个volatile HashMap<T>存储缓存项。

我很好奇更改volatile HashMap为会带来什么后果ConcurrentHashMap

我会提高性能吗?此缓存是只读缓存。

最佳选择是什么?只是HashMap?缓存将按一定间隔进行填充。


阅读 221

收藏
2020-12-03

共1个答案

一尘不染

首先,您似乎不了解volatile关键字的作用。它确保如果声明的变量保留的
引用值volatile发生更改,则其他线程将看到它,而不是拥有缓存的副本。它与访问线程安全无关。HashMap

鉴于此,并且您说的HashMap是只读事实,您当然不需要使用任何提供线程安全的东西,包括ConcurrentHashMap

编辑添加: 您现在的最后一个编辑说“正在按一定间隔填充缓存”

那不是只读的,对吗?

如果在编写(更新现有的HashMap) 要让线程读取它 则应使用ConcurrentHashMap,是。

如果要填充一个全新HashMap的变量,然后将其分配给现有变量,则可以使用volatile

2020-12-03