java - Volatile HashMap 与 ConcurrentHashMap

标签 java caching concurrency hashmap

我有一个包含 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/

相关文章:

mysql - 并发处理大量插入和查询组合的理想设计

c++ - std::vector 与一位读者和一位作者的多线程同步:仅在调整大小时锁定

java - Apache POI 出现错误,无法读取使用 FileInputStream 传递的文件

java - 为什么绑定(bind)项目中没有生成某些类?

java - UserRepository 在 @Autowired 中返回 null

java - 如何更改我的 Java 程序以使用数据库而不是数组列表?

iphone - 在慢速连接上快速移动 I/O 的最佳实践是什么?

css - JSF 是如何缓存 CSS 的?

MySQL - 具有一个变量更改的 SAME 查询花费的时间超过 10 倍

multithreading - 对Java中的安全发布和可见性(尤其是不可变对象(immutable对象))感到困惑