Dizilerin bir dizinden bir iş parçacığı okumasıyla eşzamanlılık sorunları var mı, diğer bir iş parçacığı dizinin farklı bir dizinine yazıyor, dizinler farklı olduğu sürece?java dizisi iş parçacığı güvenliği
örn.
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);
}
}
düzenlemek (bu örnek mutlaka sadece benim noktası göstermek için, gerçek kullanım için önerilmez): Bu örneği Eleştirilmesinin benim soru değil, ben gerçekten sadece eşzamanlı için, bir endekse eğer dizi erişimi bilmek istiyorum Başka bir dizinin erişimi, eşzamanlılık sorunları ortaya çıkarır, basit bir örnek düşünemedim.
teşekkürler ... drat, bayt [] dizisini kullanmak istedim ve Atom atomu yok gibi görünüyor .... Sanırım senkronize yöntemleri kullanacağım ve basit tutacağım. –
Yazmaktan çok daha fazla okumanız varsa, java.util.concurrent.locks.ReadWriteLock –
huh'ya bakmak isteyebilirsiniz, sadece anladığımdan emin olmak için: –