并发访问 Java HashMap 对象

我正在构建一个 Java REST 应用程序,我在其中使用 HashMap 来存储一些数据。

由于它有一个服务器,它可以同时处理多个访问 HashMap 的请求。所有发出的请求都会检查 Map 是否具有预定义的值(该值取决于请求正文),如果没有,则将该值添加到 Map 并返回。如果 Map 已经具有该值,它只会返回 Map 上的值。

为了拥有一个工作可靠的系统,我应该考虑什么?我将在 Map 上进行多次读取和一些写入(主要是在应用程序启动时,因为 Map 将为空)。

tl;博士

  • Java 服务器将处理多个和同时的请求。

  • 每个请求都会至少产生一个Map.containsKey(someKey),最终产生一个Map.get(someKey)

  • 有些请求会产生Map.put(someKey, someValue)

我应该使用某种并发数据结构吗?

为了争论,我知道使用内存解决方案是不可靠的。这不是用于生产用途,它只是学术性的。


蝴蝶刀刀
浏览 136回答 2
2回答

30秒到达战场

让我们首先假设我们正在使用ConcurrentHashMap,它的一个版本HashMap在并行访问时具有更可预测和更直观的内存一致性效果。鉴于此,最大的考虑是尽可能使单个键上的所有操作都是原子的,或者至少不会被另一个想要对该键执行其他操作的线程中断。如果您使用的是 Java 8 或更高版本,则 usingConcurrentHashMap的computeIfAbsent方法实现将在计算和存储新值时阻止其他线程。...作为应用程序开发人员,这正是您想要的:使用由专家编写、审查、测试和使用的库,以了解您编写应用程序的语言和环境的并发效果。

呼唤远方

如果要将其保存在内存中,则需要使用 ConcurrentHashMap。但是,如果您重新启动应用程序并丢失内存数据会发生什么?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java