Java 二维原子整数数组

Java 二维原子整数数组,java,multidimensional-array,atomic,Java,Multidimensional Array,Atomic,嘿,我想知道如何制作二维数组,因为我在javadocs上发现的只是一维数组 int[] newArray = new int[100]; AtomicIntegerArray atomicarray = new AtomicIntegerArray(newArray); 这将创建一个大小为100的原子整数数组。但是我想要一个二维原子阵列。我试过做 AtomicInteger[][] atomicArray = new AtomicInteger[100][100]; atomicArray[0

嘿,我想知道如何制作二维数组,因为我在javadocs上发现的只是一维数组

int[] newArray = new int[100];
AtomicIntegerArray atomicarray = new AtomicIntegerArray(newArray);
这将创建一个大小为100的原子整数数组。但是我想要一个二维原子阵列。我试过做

AtomicInteger[][] atomicArray = new AtomicInteger[100][100];
atomicArray[00][00].set(1);
但是我遇到了

位于nz.ac.massey.threadpool.MyClass的java.lang.NullPointerException。(MyClass.java:20)

有什么想法吗?谢谢!:)。。。我以前没有做过很多关于原子变量的工作

如果这不可能,我如何将常规基本整数二维数组最小化为原子整数二维数组?

在访问它们之前,需要实例化矩阵中的所有位置,如下所示:

atomicArray[i][j] = new AtomicInteger();
或者,如果要在某个初始值中初始化每个原子整数:

atomicArray[i][j] = new AtomicInteger(initialValue);
对于矩阵中的所有
i,j
位置。通常,您会使用两个嵌套的
for
循环来执行此操作:

for (int i = 0; i < 100; i++) {
    for (int j = 0; j < 100; j++) {
        atomicArray[i][j] = new AtomicInteger();
    }
}
for(int i=0;i<100;i++){
对于(int j=0;j<100;j++){
原子数组[i][j]=新的原子整数();
}
}

只要创建一个长度为m*n的一维数组,就需要一个将一对整数
(i,j)
映射到一个整数的函数<代码>i*n+j是一个良好的开端。假设
m
是行数,
n
是列数


将所有整数保存在原子整数数组中是个好主意。或者您必须自己处理并发问题。

您创建了一个null数组,需要初始化每个对象:
atomicArray[0][0]=new AtomicInteger()我不想粗鲁,但如果您无法诊断NullPointerException,那么处理并发/多线程问题可能还为时过早。如果没有代码,就不可能为您进行诊断。@alaster谢谢!我还有一个问题(从上一个扩展而来),因为我将遍历所有100个对象。我只初始化了20-30个对象,我如何才能让我未初始化的对象不出现nullexception呢?
NullPointerException
在调用数组[someIndex]时抛出,当这个对象为null时。如果你想使用它,你必须先初始化它。或者根本不调用这个对象。您可以使用lazy initialize:
如果(array[someIndex]==null){array[someIndex]=new AtomicInteger();}
但是我认为@JBNizet是正确的。在复杂代码中使用原子整数谢谢你的关心,但这是一项任务,所以我没有选择。谢谢:)我现在有了并行运行的生命游戏:)