我需要在Java中编写一个哈希映射,它将用于主要用于读取的线程。考虑客户端只写入一次哈希映射(最多只有10或15个条目)的情况,但密钥和值来自客户端。这意味着我事先不知道键/值对。一旦写完它们,它们会同时读取多次。
以下有效的方式更像下面的代码段:
public String getPS(String query) {
//put into map if not present
if(psMap.get(query) == null){
synchronized (this) {
if(psMap.get(query) == null){
//test1 is just a sample value
psMap.put(query,"test1");
}
}
}
return psMap.get(query);
}
答案 0 :(得分:4)
ConcurrentHashMap
的实现假定最常见的操作是检索值,因此它已针对get操作进行了优化。它甚至还有putIfAbsent方法,所以你不必自己实现它。
答案 1 :(得分:0)
ConcurrentHashMap具有并发访问权和记住计算值的能力。注意:每个键只会调用一次。
public String getPS(String query) {
//put into map a computed value if not present
return psMap.computeIfAbsent(query, $ -> "test1");
}