只要索引不同,是否有任何併發性問題與一個數組的一個索引讀取,而另一個線程寫入數組的另一個索引?java array thread-safety
例如(這個例子不一定推薦真正使用,只是爲了說明我的觀點)
class Test1
{
static final private int N = 4096;
final private int[] x = new int[N];
final private AtomicInteger nwritten = new AtomicInteger(0);
// invariant:
// all values x[i] where 0 <= i < nwritten.get() are immutable
// read() is not synchronized since we want it to be fast
int read(int index) {
if (index >= nwritten.get())
throw new IllegalArgumentException();
return x[index];
}
// write() is synchronized to handle multiple writers
// (using compare-and-set techniques to avoid blocking algorithms
// is nontrivial)
synchronized void write(int x_i) {
int index = nwriting.get();
if (index >= N)
throw SomeExceptionThatIndicatesArrayIsFull();
x[index] = x_i;
// from this point forward, x[index] is fixed in stone
nwriting.set(index+1);
}
}
編輯:批評這個例子是不是我的問題,我真的只是想知道一個索引,如果數組訪問,同時對訪問另一個索引引起併發性問題,無法想到一個簡單的例子。
感謝... DRAT,我想用一個byte []數組,它看起來像有沒有這樣的原子動物....我想我會只使用同步方法並保持簡單。 – 2009-07-15 17:24:50