Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java get()返回元素的深度副本?_Java_Caching_Ehcache - Fatal编程技术网

Java get()返回元素的深度副本?

Java get()返回元素的深度副本?,java,caching,ehcache,Java,Caching,Ehcache,我使用ehcache缓存一个javapojo,它的属性是普通的javahashmap 在以下情况下,我需要担心并发修改异常吗 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

我使用ehcache缓存一个javapojo,它的属性是普通的javahashmap

在以下情况下,我需要担心并发修改异常吗

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()是否为缓存中的元素提供了一个“深度副本”,并且我可以在不担心并发性的情况下对元素键和值执行任何操作?

找到了它!我确实在System.identityHashCode()的帮助下分析了缓存中的对象,这似乎取决于具体情况

同样有趣的是:
ehcache具有以下属性:copyOnWrite和copyOnRead。
例如:
在ehcache.xml中,或者查看net.sf.ehcache.config.CacheConfiguration#copyOnRead。

您能否澄清这一点,它如何取决于具体情况?我认为它将返回相同的对象而不是副本…这取决于,如果对象已序列化到diskstore并从memorystore中删除,那么它将不是相同的对象实例。这就是我说“视情况而定”的原因。是的,就diskstore而言。但是,我猜如果它在内存存储中,它将是同一个对象,或者?如果它是内存存储,我确实认为它将是同一个对象,但我不确定,只需使用System.identityHashCode()进行一些测试,看看在您的情况下是否每次都返回相同的对象。
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.