4

ねえ、どうすればAtomicIntegerを 2 次元配列にすることができるのだろうと思っています。javadocs で見つけたものから、 At​​omicIntegerArrayは 1 次元のみです。

int[] newArray = new int[100];
AtomicIntegerArray atomicarray = new AtomicIntegerArray(newArray);

サイズ100のAtomicIntegerArrayを作成します。しかし、2次元のatomicarrayが欲しいです。やってみた..

AtomicInteger[][] atomicArray = new AtomicInteger[100][100];
atomicArray[00][00].set(1);

しかし、私は会っています..

java.lang.NullPointerException at nz.ac.massey.threadpool.MyClass.(MyClass.java:20)

アイデアはありますか?ありがとう!:)...私は以前にアトミック変数をあまり扱ったことがありません。

これが不可能な場合、通常のプリミティブ整数の 2 次元配列を AtomicInteger の 2 次元配列に最小化するにはどうすればよいですか?

4

2 に答える 2

6

長さの1次元配列を作成するだけm * nで、整数のペアを1つの整数にマップする関数が必要になります(i, j)i * n + j良いスタートです。m行数と列数を想定してnいます。

すべての整数をAtomicIntegerArray内に保持することをお勧めします。または、自分自身で並行性に対処する必要があります。

于 2012-05-23T11:03:27.033 に答える
2

次のように、アクセスする前にマトリックス内のすべての位置をインスタンス化する必要があります。

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();
    }
}
于 2012-05-23T11:01:20.340 に答える