这个问题是出于好奇而提出的,我有三个类 A
、B
和 C
。
- 类
A
有一个成员变量 Map 说sharedMap
- B 类和 C 类正在访问 A 类的
sharedMap
并尝试根据需要更改映射的值。
问题是 - 我无法更改 A
类中的任何内容,因为我无法控制 A
类(无法使用同步关键字或方法来同步 map ) )有什么办法仍然可以管理类 A
的 sharedMap
的同步吗?
最佳答案
使用组合 - 而不是创建 A 的实例,只需将其包装在其他类中并使用同步方法公开映射。如果 A 正在实现一些接口(interface),那么该包装类也应该实现它们,并将所有调用委托(delegate)给 A。所以基本上类似于
class WrappedA implements InterfaceA {
private A inner = new A(); // don't expose A's instances to other classes
public synchronized void mapManipulator() {
// do something with inner.map
}
@Override
public void interfaceMethodA() {
// IF any of those methods are using the map, remember to synchronize
inner.interfaceMethodA();
}
}
由于这是您的代码,您可以进行这样的更改。如果你甚至不能做到这一点(其他东西正在创建 A?),那么 A 将始终暴露给其他类,因此你必须制定一个约定,所有其他类将通过某个新类调用它,但这将是非常错误的如果有人忘记使用包装器而不是 A,则很容易发生。
有关上下文的更多详细信息可能有助于想出更好的东西......
关于java - 从多个类访问未同步的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25548718/