从 AtomicLongArray 获取数组

Phi*_*son 4 java java.util.concurrent

使用 Java 1.6 和 AtomicLongArray,我想将原始 AtomicLongArray “复制”到一个新的 AtomicLongArray 中。有一个构造函数接受一个数组 (AtomicLongArray(long[])),所以我想我可以从原始数组中获取数组并将其提供给构造函数。

可悲的是, AtomicLongArray 中的实际 long[] 是私有的,似乎没有吸气剂。有没有办法做到这一点,这意味着将值从一个 AtomicLongArray 复制到另一个?我无法基于这个类创建自己的类,因为 sun.misc.Unsafe 类对我不可用。

这是必需的,因为我将迭代这些值,并且我不希望它们在迭代过程中被另一个线程修改。所以我想我可以制作一个副本并将其用于迭代......

谢谢!菲利普

Jon*_*eet 5

我怀疑你必须先创建自己的long[]并填充它,或者只是迭代原始的:

AtomicLongArray copy = new AtomicLongArray(original.length());
for (int i = 0; i < copy.length(); i++)
{
    copy.set(i, original.get(i));
}
Run Code Online (Sandbox Code Playgroud)

请注意,尽管中的每个单独操作AtomicLongArray都是原子操作,但没有批量操作 - 因此无法在时间 T 获取整个数组的“快照”。如果您想要这种行为,我相信您需要使用同步。