我创建了一个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。

现在,除非有一些逐出或到期,否则数据应该在那里。因此,我需要一个完整的例子来告诉您发生了什么事。

我的第一个问题是:为什么要清理并放置?为什么不只放?我们是否同意清除将清除所有条目?您的缓存中只有一个条目?

10-07 12:27