1

我创建了一个Cache对象,它存储 aString作为键和一个序列化的对象作为值。

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. 我不知道为什么。

4

2 回答 2

2

首先,缓存不是存储。所以你不能指望缓存总是返回最新的数据。由于不同的原因,它可能会返回 null。

现在,除非发生某些驱逐或过期,否则数据应该在那里。所以我需要一个完整的例子来告诉你发生了什么。

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

于 2017-08-23T15:25:02.303 回答
1

我现在只看到第一个线程也以 a 开头get,这是否意味着始终安装映射?如果是这样,您确定其他线程实际上使用的是同一个Cache实例吗?

于 2017-08-26T18:53:44.487 回答