我正在构建Java REST应用程序,并在其中使用HashMap来存储一些数据。
由于具有服务器,因此它可以同时处理访问HashMap的多个请求。所有发出的请求都会检查Map是否具有预定义的值(该值取决于请求主体),如果没有,则将该值添加到Map中并返回它。如果Map已经具有该值,则只需在Map上返回该值即可。
要拥有一个运行可靠的系统,我应该考虑什么?我将在Map上进行许多读取,并进行一些写操作(主要是在应用程序启动时,因为Map将为空)。
tl; dr
Map.containsKey(someKey)
,并最终产生一个Map.get(someKey)
Map.put(someKey, someValue)
我应该使用某种并发数据结构吗?
出于争论的目的,我知道使用内存中的解决方案并不可靠。这不是供生产使用的,只是出于学术目的。
答案 0 :(得分:0)
让我们首先假设我们使用的是ConcurrentHashMap
,这是HashMap
的一个版本,当并行访问时,它具有更可预测和直观的内存一致性效果。
鉴于此,最大的考虑是尽可能对单个键原子进行所有操作,或者至少不被希望对该键执行其他操作的另一个线程中断。如果您使用的是Java 8或更高版本,则在计算和存储新值时,使用ConcurrentHashMap
的{{3}}方法的实现将使其他线程保持空白。
...作为应用程序开发人员,这正是您想要的:使用由专家编写,审查,测试和使用的库,该库在您编写语言和环境的并发影响中使用应用。
答案 1 :(得分:-1)
如果要将其保留在内存中,则需要使用ConcurrentHashMap。
但是,如果重新启动应用程序并丢失了内存数据会怎样?