2014-10-24 27 views
7

AtomicInteger ile "sonuç pozitif mi sıfır mı" işlemi yapmanın bir yolu var mı? istenilen davranışı açıklamak için: akım değeri sıfırdan büyük ise, akım değeri sıfıra eşitse şey yapmak AtomicInteger: negatif olmayan

  • azaltma,

    • (negatif akım değeri ele değildir)
    • Java 8'de
  • +3

    Bir yol göremiyorum. Belki de java.util.concurrent.Semaphore' kullanabilirsiniz? Her zaman pozitif olması garantilidir ve bunu 'acquire() 'veya' tryAcquire() 'ile azaltabilirsiniz. – markspace

    cevap

    10

    , yes:

    Java 8 önce
    atomicInteger.updateAndGet(i -> i > 0 ? i - 1 : i); 
    

    , no.

    3

    Bunu öncesi Java 8 böyle bir şey herhalde:

    int val = atomicInt.get(); 
    boolean success = false; 
    while(val > 0 && !success) { 
        success = atomicInt.compareAndSet(val, val - 1); 
        if(!success) { 
         // Try again if the value is still > 0 
         val = atomicInt.get(); 
        } 
    } 
    // Check 'success' to see if it worked 
    

    değil en zarif kodu, ama hile yapar düşünüyorum.

    +0

    Bunun için işe yaramadığını düşünmüyoruz, senkronize erişime ihtiyacınız olacak mı? –

    +0

    Hayır, bu bir AtomicInteger'in noktasıdır. – BarrySW19