我有和Observable对象共享以下对象: -
HashMap<String,HashSet<String>> data;
我有一个put
函数,它在上面的数据中附加条目,并在获得足够的数据后通知观察者。
put(String k, String line){
if (!data.containsKey(key)) {
addNewKey(k, line);
}else{
data.get(key).appendToList(deviceid);
}
if (data.get(key).size() > writeSizePerList || data.size() > writeSizeLists || System.currentTimeMillis() > lastDumpTimestamp + waitTimeMillis) {
setChanged();
notifyObservers();
lastDumpTimestamp = System.currentTimeMillis();
}
}
但是我陷入了这个功能。一旦所有观察者在通知调用之后已经处理完毕,我需要清除数据对象。我该如何捕捉这个事件?由于可伸缩性问题,我无法继续添加数据。
修改
即使我们不清除它,问题仍然存在。我们将如何处理put
函数想要更改数据的竞争条件,因为之前的通知,观察者仍在读取数据?如何处理观察者和观察者之间的速度不匹配?