AtomicInteger senkronizasyonu işliyor mu?
İki iş parçacığı da i ++int i
kullanarak aynı artarsa , i ++ atomik işlem olmadığı için bir sorunla karşılaşabiliriz . İşte bu yüzden AtomicInteger.increment()
, artan atomik yapan vardır . Yani, eğer 1 çekirdek ve 2 iş parçacığımız olsaydı .increment()
, kesinlikle bir sorun olmazdı (çünkü işlemin ortasında askıya alınamaz).
Ama ya 2 çekirdeğimiz ve 2 iş parçacığımız olsaydı ve onlar paralel olarak (tam olarak aynı anda) buna derlerse increment()
?
İle aynı değeri yükleme olasılıkları olabilir int i
mi? Yani 1 olsaydı int i
, sonuç 3 değil 2 olurdu . Bu durumda atomik işlem olup olmadığı umurumuzda değil çünkü ikisi de aynı anda aynı değeri alıyorlar ..
Alt satır: senkronizasyon AtomicInteger tarafından mı işleniyor?
Yanıtlar
İle aynı değeri yükleme olasılıkları olabilir
int i
mi?
Evet var, ama senin için halledildi.
incrementAndGet
Yöntem setleri artırılır değeri o bir atom "karşılaştırarak kümesi" operasyonu kullanan ancak yalnızca yeni bir değer zaten ayarlanmış olmasaydı . Karşılaştırma başarısız olursa, incrementAndGet
yeni değeri getirir ve tekrar dener.
Net etki, incrementAndGet
birden fazla iş parçacığından kullanımın güvenlidir .