如果我在数组上同步,这是否意味着我在同步其中的所有元素,或者我在同步数组对象?如果后者为真,那么我如何才能同时同步数组中的所有元素,以确保在执行某个 block 时不会访问 non?
例如 假设我们有一组银行账户,我们希望确保在执行特定代码块时没有线程可以访问任何账户。
最佳答案
它在监视器上同步阵列本身。
即使您可以对所有元素进行同步,也不能确保它们未被访问 - 因为同步只是建议性的。
这里的解决方案可能是封装:根本不允许其他代码看到数组本身。这样,您就可以通过自己的方法(例如 ArrayList
)控制其他代码如何访问数组的成员。
请注意,即使您执行了所有这些操作,也不会阻止其他代码在您的独占代码开始运行之前获取数组元素,然后在您的独占代码运行时使用该引用(例如,改变它所指的对象)。您并没有真正向我们提供太多关于您正在尝试做什么的信息,但您可能需要采取不同的方法。
关于java - 在数组上同步。它是在所有元素上同步还是在数组对象上同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860462/