LongAdder [] + System.arraycopy()=?

时间:2014-10-06 09:13:23

标签: java arraycopy atomic-long

简化的场景是我有一个LongAdders数组,多个线程正在访问这个数组,以便在给定索引处增加变量。

没有任何额外的锁定机制,arraycopy安全吗?

至于我已经调查过这个问题应该没问题,因为LongAdder的所有重要字段都是易变的,并且由于描述增量()应该是原子的(我希望它不会保留任何部分状态这可能是未来运营中的任何问题)。

有人可以证实吗?

P.S。我知道我可能没有获得最新的快照(复制期间的增量),但没关系。

1 个答案:

答案 0 :(得分:1)

LongAdder数组无论如何都只包含引用,因此将被复制的内容。 LongAdder中的字段与此无关。

是否"安全"使用arraycopy取决于你使用它做什么 - 如果你正在使用它将一个数组复制到另一个数组,那么这很好(本身就是你的;你好了)需要担心如何使线程对线程可见)。如果您正在使用它将数组的一部分复制到同一数组的另一部分,您应该考虑多个线程从同一索引读取并获得不同引用的可能性。