1

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

在没有任何额外锁定机制的情况下进行数组复制是否安全?

据我对此事的调查,应该没问题,因为 LongAdder 的所有重要字段都是易变的,并且由于描述 increment() 应该是原子的(也就是说,我希望它不会保留任何可能的部分状态未来运营中的问题)。

谁能证实这一点?

PS 我知道我可能无法获得最新的快照(复制期间的增量),但这没关系。

4

1 回答 1

2

无论如何,LongAdder数组只会包含引用,所以这就是将被复制的内容。其中的字段LongAdder与此无关。

使用它是否“安全”arraycopy取决于你用它做什么——如果你用它来将一个数组复制到另一个数组,那很好(就其本身而言;你需要担心如何使数组可见线程虽然)。如果您使用它将数组的一部分复制到同一数组的另一部分,则应考虑多个线程从同一索引读取并获得不同引用的可能性。

于 2014-10-06T09:15:40.537 回答