繁体   English   中英

并发访问Java HashMap对象

[英]Concurrent access to Java HashMap object

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

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

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

tl; dr

  • Java Server将处理多个同时请求。
  • 每个请求将至少产生一个Map.containsKey(someKey)并最终产生一个Map.get(someKey)
  • 某些请求将生成Map.put(someKey, someValue)

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

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

让我们开始假设我们使用ConcurrentHashMap ,这是HashMap一个版本,当并行访问时,它具有更可预测的直观内存一致性效果。

鉴于此,最大的考虑因素是,如果可能的话,使所有操作都对单个键进行原子操作,或者至少不被希望对该键执行其他操作的另一个线程中断。 如果您使用的是Java 8或更高版本,使用ConcurrentHashMap的实现的computeIfAbsent方法将让其他线程了,而新的价值被计算和存储。

...作为应用程序开发人员,这正是您想要的:使用一个由专家编写,审查,测试和使用的库,用于在编写应用程序时所使用的语言和环境的并发影响。

如果要将其保留在内存中,则需要使用ConcurrentHashMap。

但是,如果重新启动应用程序并丢失了内存数据,会发生什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM