多个线程可以使用相同CacheManager的相同Ehcache对象吗?
我创建了一个Cache
对象,它将String
作为键存储,并将序列化对象存储为值。
Cache(String--->Object)
我试图运行三个Akka线程,以同步的方式检索和写入相同的Ehcache对象。
Thread 1- synchronized (LockForEhcache){ serializedObj = cachename.get("key"); //--- this returns an Object } //modify the serializedObj here.... //Again store the modify Object in the Cache synchronized (LockForEhcache){ cachename.clear(); cachename.put("key",serializedObj); Thread 2- synchronized (LockForEhcache){ serializedObj = cachename.get("key"); //--- this returns null } Thread 3- synchronized (LockForEhcache){ serializedObj = cachename.get("key"); //--- this returns null }
但只有一个线程获取存储在Cache
的值。 对于其余的线程,它会抛出NullPointerException
。 我无法弄清楚为什么。
首先,缓存不是商店。 因此,您不能指望缓存始终返回最新数据。 由于不同的原因,它可能会返回null。
现在,除非发生一些驱逐或过期,否则数据应该存在。 所以我需要一个完整的例子来告诉你发生了什么。
我的第一个问题是:你为什么要清楚并提出? 为什么不放? 我们是否同意清除所有条目? 您的缓存中只有一个条目?
我现在只看到第一个线程也以get
开头,这是否意味着总是安装映射? 如果是这样,您确定其他线程实际上使用相同的Cache
实例吗?
- Spring:hibernate + ehcache
- Spring Boot,使用EhCache进行缓存
- Ehcache磁盘存储不干净关机
- Ehcache设置为永恒,但无论如何都会忘记元素?
- java.lang.NoClassDefFoundError:org / hibernate / cache / EntityRegion配置EHCache
- 使用Ehcache弹出@Cacheable,spel为有效对象找到null
- 引起:java.lang.NoClassDefFoundError:当tomcat / lib下存在类时?
- 如何在不使用hibernate / spring拦截器的情况下为独立Java程序配置EHcache?
- 如何让Ehcache为无限高速缓存保持堆大小字节数统计?