我正在使用ehcache来缓存一个java pojo,它有一个普通的java hashmap作为属性。
在下列情况下,我是否需要担心并发修改异常?
thread 1:
- obj1 = cache.get(keyx)
- obj1.hashmap.put(x, y)
- cache.put(keyx, obj1)
thread 2:
- obj1 =cache.get(keyx)
- for(akey: obj1.hashmap.keys){}
我怀疑我确实需要为hashmap使用线程安全实现,另外使我的pojo的线程安全吗?
或者cache.get()给我一个缓存中元素的“深层复制”,我可以用元素键和值做任何事情而不用担心并发吗?
答案 0 :(得分:0)
同样有趣: Copying cached Map<String , List> object into temporary Map<String , List> object
答案 1 :(得分:0)
ehcache has the properties :copyOnWrite and copyOnRead.
for example:
<cache name="properties"
maxBytesLocalHeap="100M"
eternal="false"
overflowToDisk="false"
timeToLiveSeconds="600"
copyOnRead="true"
copyOnWrite="true">
</cache>
in the ehcache.xml or look at net.sf.ehcache.config.CacheConfiguration#copyOnRead.