2015-04-14 53 views
6

如何更新AtomicInteger如果其當前值小於給定值?我們的想法是:如何根據條件更新原子?

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

請貼沒有任何編譯錯誤,即工作代碼.. – SMA

+0

您發佈的代碼片段沒有意義。你首先更新'ai'(不管你用.update()表示的意思),並且用新的檢查值。 – SubOptimal

+1

這是一個很好的問題,它非常有意義。對於批評:OP不可能爲此編寫工作代碼。如果他這樣做了,他需要知道答案,所以他只能發佈僞代碼。 –

回答

11

如果您使用的是Java 8,你可以使用在AtomicInteger新的更新方法,你可以通過lambda表達式之一。例如:

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中,您可以使用CAS環這樣的:

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