2015-04-14 8 views
6

Nasıl AtomicInteger güncellemek için? fikirdir: Java 8 kullanıyorsanız size lambda ifade geçebilir AtomicInteger yeni güncelleme yöntemlerinden birini kullanabilirsinizKoşullara dayanarak bir Atomik nasıl güncellenir? Şu anki değeri verilen değerden az ise

AtomicInteger ai = new AtomicInteger(0); 
... 
ai.update(threadInt); // this call happens concurrently 
... 
// inside AtomicInteger atomic operation 
synchronized { 
    if (ai.currentvalue < threadInt) 
     ai.currentvalue = threadInt; 
} 
+0

lütfen herhangi derleme hatasız yani, çalışan kod yapıştırma .. – SMA

+0

Yayınladığınız kod Örneğin snippet hiçbir anlam ifade etmiyor. İlk olarak 'ai'yi (.update() ile kastediyorsanız) ve değeri yenisiyle kontrol ettikten sonra güncelleştirin. – SubOptimal

+1

Bu iyi bir soru ve mükemmel bir anlam ifade ediyor. Eleştiri için: OP'nin bunun için çalışma kodu yazması imkansızdır. Eğer yaptıysa, cevabı bilmesi gerekecek, bu yüzden sadece sahte kod yazabilir. –

cevap

11

.

AtomicInteger ai = new AtomicInteger(0); 

int threadInt = ... 

// Update ai atomically, but only if the current value is less than threadInt 
ai.updateAndGet(value -> value < threadInt ? threadInt : value); 
4

Java 8 yoksa, böyle bir CAS-döngü kullanabilirsiniz::

while (true) { 
    int currentValue = ai.get(); 
    if (newValue > currentValue) { 
     if (ai.compareAndSet(currentValue, newValue)) { 
      break; 
     } 
    } 
} 
İlgili konular