我有一个缓存类,其中包含一个volatile HashMap<T>存储缓存项。
volatile HashMap<T>
我很好奇更改volatile HashMap为会带来什么后果ConcurrentHashMap?
volatile HashMap
ConcurrentHashMap
我会提高性能吗?此缓存是只读缓存。
最佳选择是什么?只是HashMap?缓存将按一定间隔进行填充。
首先,您似乎不了解volatile关键字的作用。它确保如果声明的变量保留的 引用值volatile发生更改,则其他线程将看到它,而不是拥有缓存的副本。它与访问线程安全无关。HashMap
volatile
HashMap
鉴于此,并且您说的HashMap是只读事实,您当然不需要使用任何提供线程安全的东西,包括ConcurrentHashMap
编辑添加: 您现在的最后一个编辑说“正在按一定间隔填充缓存”
那不是只读的,对吗?
如果在编写(更新现有的HashMap) 时 要让线程读取它 , 则应使用ConcurrentHashMap,是。
如果要填充一个全新HashMap的变量,然后将其分配给现有变量,则可以使用volatile