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 imi? 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 imi?
Evet var, ama senin için halledildi.
incrementAndGetYö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, incrementAndGetyeni değeri getirir ve tekrar dener.
Net etki, incrementAndGetbirden fazla iş parçacığından kullanımın güvenlidir .