我有一个包含 volatile HashMap<T>
的缓存类存储缓存项。
我很好奇更改 volatile HashMap
会产生什么后果至 ConcurrentHashMap
?
我会获得性能提升吗?此缓存是只读缓存。
最好的选择是什么?只是哈希表?缓存按时间间隔填充。
最佳答案
首先,您似乎不了解 volatile
关键字的作用。它确保如果声明为 volatile
的变量持有的引用值发生变化,其他线程将看到它而不是拥有缓存副本。它与访问 HashMap
鉴于此,以及您说 HashMap
是只读的事实......您当然不需要使用任何提供线程安全的东西,包括 ConcurrentHashMap
编辑以添加:您现在说的上次编辑“正在按时间间隔填充缓存”
那不是只读的,是吗?
如果您要在写入(更新现有的 HashMap)时 从中读取线程,那么您应该使用 ConcurrentHashMap
,是的。
如果您要填充一个全新的 HashMap
然后将其分配给现有变量,那么您可以使用 volatile
关于java - Volatile HashMap 与 ConcurrentHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357823/