我创建了一个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。
现在,除非有一些逐出或到期,否则数据应该在那里。因此,我需要一个完整的例子来告诉您发生了什么事。
我的第一个问题是:为什么要清理并放置?为什么不只放?我们是否同意清除将清除所有条目?您的缓存中只有一个条目?