在阵列上同步。它是在所有元素上还是在数组对象上同步?

时间:2013-04-07 08:35:22

标签: java synchronization

如果我在数组上同步,这是否意味着我正在同步其中的所有元素,或者我是否在数组对象上进行同步?如果后者为真,那么如何同时对数组中的所有元素进行同步,以便确保在执行某个块时可以访问non?

E.g。 假设我们有一系列银行账户,我们希望确保在执行某段代码时没有线程可以访问任何账户。

2 个答案:

答案 0 :(得分:5)

它在监视器上为阵列本身进行同步。

即使你可以同步所有元素,也不能确保它们不被访问 - 因为同步只是建议性的。

这里的解决方案可能是封装:不要让其他代码完全看到数组本身。这样,您就可以通过自己的方法控制其他代码如何访问数组成员(例如ArrayList)。

请注意,即使您执行了所有这些操作,也不会阻止其他代码在您的独占代码开始运行之前获取数组元素,然后在您的独占代码运行时使用该引用(例如,改变它所指的对象)。您还没有真正向我们提供有关您尝试做什么的大量信息,但您可能需要采取不同的方法。

答案 1 :(得分:0)

Java 9处理内存的方式不同,并且有更多选项可用于同步数组元素。有关详细的技术说明,请参阅"使用JDK 9内存订购模式" http://gee.cs.oswego.edu/dl/html/j9mm.html

如果将来这个链接消失了,google" java varhandle"了解更多。