我正在构建一个 Java REST 应用程序,其中使用 HashMap 来存储一些数据。
由于它有一个服务器,它可以同时处理多个访问 HashMap 的请求。发出的所有请求都会检查 Map 是否具有预定义值(该值取决于请求正文),如果没有,则将该值添加到 Map 并返回它。如果 Map 已经具有该值,它只会返回 Map 上的值。
为了拥有一个运行可靠的系统,我应该考虑什么?我将对 map 进行多次读取和一些写入(主要是在应用程序启动时,因为 map 将为空)。
tl;博士
- Java 服务器将处理多个并发请求。
- 每个请求都会至少发出一个
Map.containsKey(someKey)
并最终发出一个Map.get(someKey)
- 某些请求将生成
Map.put(someKey, someValue)
我应该使用某种并发数据结构吗?
为了争论,我知道使用内存解决方案并不可靠。这不适用于生产用途,仅用于学术目的。
最佳答案
我们首先假设我们正在使用 ConcurrentHashMap
,HashMap
的一个版本,在并行访问时具有更可预测和直观的内存一致性效果。
ConcurrentHashMap
的 computeIfAbsent
实现方法将在计算和存储新值时将其他线程排除在外。
...作为应用程序开发人员,这正是您想要的:使用一个由专家编写、审查、测试和使用的库,了解您正在编写的语言和环境的并发影响。应用程序。
关于java - Java HashMap对象的并发访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275168/