我开始尝试使用同步版本:
public final class SynchronizedIntArray {
private final int[] elements = new int[1000000];
public synchronized void set(int index, int value)
{
elements[index] = value;
}
public synchronized int[] getAll()
{
return elements;
}
}
性能不好。 我在网上搜索更好的解决方案,并找到了AtomicIntegerArray
public final class ConcurrentIntArray
{
private final AtomicIntegerArray elements = new AtomicIntegerArray(1000000);
public void set(int index, int value)
{
elements.set(index, value);
}
public int[] getAll()
{
int[] intArray = new int[elements.length()];
for (int i = 0; i < intArray.length(); i++) {
intArray[i] = elements.get(i);
}
return intArray;
}
}
但我想知道为什么没有一种方法可以一次性获取完整的int数组,而不是从AtomicIntegerArray中逐个获取。
尽管这种方式的性能仍然比同步版本要好得多,但我真的需要以这种方式复制吗?
对于我的问题,是否有比AtomicIntegerArray更快的替代方法?
elements[index] = value;
,可以看看AtomicIntegerArray
的代码,看看他们是怎么做的。 - Scary Wombatsynchronized
,因为它会锁定整个数组以进行单个赋值。 - Louis Wasserman