我有一个数据对象的存储区,我希望一次同步与某个特定对象相关的修改。“规范”锁对象的实现
class DataStore {
Map<ID, DataObject> objects = // ...
// other indices and stuff...
public final void doSomethingToObject(ID id) { /* ... */ }
public final void doSomethingElseToObject(ID id) { /* ... */ }
}
也就是说,我不希望我的数据存储拥有单个锁,因为对不同数据对象的修改是完全正交的。相反,我希望能够仅锁定与单个数据对象相关的锁。
每个数据对象都有一个唯一的ID。一种方法是创建一个ID => Lock
的地图,并根据与该id关联的一个锁对象进行同步。另一种方法是做类似的事情:
synchronize(dataObject.getId().toString().intern()) {
// ...
}
但是,这看起来像是内存泄漏 - 内部化字符串可能永远不会收集。
另一个想法是根据数据对象本身进行同步;然而,如果你有一个数据对象不存在的操作呢?例如,像addDataObject(DataObject)
这样的方法会同步什么?
总之,我怎么可以编写一个函数f(s)
,其中s
是String
,这样f(s)==f(t)
如果s.equals(t)
在存储安全的方式?
相当不错,谢谢正确同步。 – Jake