【发布时间】:2014-02-23 11:06:36
【问题描述】:
我了解public 和private 关键字的基本知识(我仍然不确定protected 是做什么的)
我有一个关于“为线程安全保护数据成员”的问题。
例如,假设我有一个扩展 Thread 的类 MyClass,属于该类的是一个名为 MyDataMember 的 私有 数据成员。假设这个数据成员有 public 访问器和设置器函数,它们确保同步数据成员。
现在从“外部”的角度来看这一切都很好,因为其他线程只能在正确同步时设置和检索数据成员。但是,within MyClass 的其他函数呢?假设我有另一个函数 within MyClass 称为 DoSomething。我知道我不应该尝试直接访问MyDataMember,但我可能会不时忘记调用访问器/设置器方法并直接访问/设置数据成员。
我的问题是: 有没有一个关键字可以用来声明函数成员对某些数据成员的独占访问权?这样,如果我“不小心”从没有独占访问权限的方法直接访问数据成员,则会发生错误。我只是认为这会使开发过程中的事情变得更安全(至少对我而言!)
【问题讨论】:
-
是的,
MyClass中的访问器/设置器函数使用 synchronized 关键字,效果很好。但我想知道是否有办法阻止从MyClass中的方法直接访问MyDataMember,而不是访问器/设置器方法。 -
关于你我的问题是一部分:例如:private int i; accessor 和 setter/mutator 也是方法(就像任何其他非静态方法一样)。没有办法阻止方法直接访问同一个类的变量。
-
不,没有办法做到这一点。也许你想使用
AtomicReference? -
好的,谢谢您的信息。我不认为有,但不确定。将使开发更容易,因为编译器可以标记对数据成员 IMO 的非法访问。
-
在 C++ 中,这样做的方法是将您需要保护的成员包装在它自己的类中,并且该类根本不允许您访问或修改该成员,除非您将其传递给它一个引用到你的锁。所以没有办法编写代码来访问没有锁的成员。
标签: java multithreading