我创建了一个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
。我无法弄清楚原因。
答案 0 :(得分:2)
首先,缓存不是商店。因此,您无法期望缓存始终返回最新数据。由于不同的原因,它可能会返回null。
现在,除非发生一些驱逐或过期,否则数据应该在那里。所以我需要一个完整的例子来告诉你发生了什么。
我的第一个问题是:为什么要清楚并放?为什么不放?我们是否同意清除所有条目?您的缓存中只有一个条目?
答案 1 :(得分:1)
我现在只看到第一个线程也以get
开头,这是否意味着映射已安装总是?如果是这样,您确定其他线程实际上使用的是同一个Cache
实例吗?