调查 ChronicleMap (2.1.7),在调用 acquireUsingLocked(); 时,我不清楚 WriteContext 的正确用法;
我感兴趣的场景是一个函数,从函数调用者的角度来看,我需要以原子方式执行 2 个操作。其中之一是向地图添加一个条目(如果不存在)。只有在地图中给定键之前没有值的情况下,才应该发生另一个。
如果先前在映射中没有给定键的值,并且第二个操作失败,则不应更新映射,以便后续测试找不到相应键的值。
如果地图中已经有给定键的条目,我不想更新它的原始值,也不想进行第二个动作。但是,我确实需要使用原始条目的值来构造调用者的返回值。
WriteContext.created() 的文档说,仅当条目先前存在时它才返回 true。如果该条目先前存在,是否可以从上下文中获取对先前值的引用(或其他方式 - 例如在 WriteContext 范围内调用 map.get() )?
WriteContext.value() 指的是什么?上一个条目的值,还是我在调用 acquireUsingLocked() 时提供的可能更新的值?
此外,如果地图中以前没有条目,并且我不想更新地图,我应该调用 WriteContext.removeEntry() 还是 WriteContext.dontPutOnClose()?
这是我认为需要的逻辑示例:
EntryData newValue = new EntryData();
EntryData originalValue = null;
try (WriteContext<String, EntryData> context = _map.acquireUsingLocked(key, newValue) ) {
if ( !context.created() ) {
if ( doSomething() ) {
result = createResult(newValue);
}
else {
context.removeEntry();
result = null;
}
}
else {
context.dontPutOnClose();
originalValue = context.value();
result = createResult(originalValue);
}
}