多个线程可以使用相同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实例吗?