1
在给出的例子中,我有一个内部类,它在想象中的ExampleCache
类中定义了一个读通CacheLoaderWriter
,该类将抽象缓存操作,以便第三方仅仅认为他们正在访问数据结构(键值对)。我的问题涉及到loadAll
方法。并行写入Ehcache会有危险吗?
如果写入loadAll
并行写入EhCache,是否会有记录变异或不稳定的风险? EhCache是为处理用户定义的并发而构建的吗?
class ExampleCacheLoader implements CacheLoaderWriter<String, ArrayList> {
private HashMap<String, ArrayList> map;
public CacheLoader() {
map = new HashMap<>();
}
@Override
public ArrayList<String> load(String s) throws Exception {
Map.Entry<String, ArrayList<String>> personEntry = getPersonAliases(s);
if(!map.containsKey(personEntry.getKey())){
map.put(personEntry.getKey(), personEntry.getValue());
}
return map.get(personEntry.getKey());
}
@Override
public Map<String, ArrayList> loadAll(
Iterable<? extends String> keys) throws Exception {
Map<String, ArrayList> localTempMap = new HashMap<>();
Stream keyStream = StreamSupport.stream(entries.spliterator(), true);
keyStream.forEach(key -> {
localTempMap.putIfAbsent(
getterExample(key).getKey(),
getterExample(key).getValue());
});
map.putAll(localTempMap);
return localTempMap;
}
.
.
.
这是完全合理的。我对Java的缓存技术相对来说比较陌生,我以前的经历是用C和C++编写的,所以我想我只有几个误解才有幸运。 – Wes