2013-10-06 2 views
0

이 작업은 원자적일 것인가, 아니면 데이터 경합이 발생할 수 있습니까?AtomicInteger의 중첩 된 메서드 호출도 Java에서 원자입니다.

atomicInteger.set(-atomicInteger.get()); 

데이터 경합이있는 경우 원자적인 방법으로 AtomicInteger을 무효화하는 방법은 무엇입니까?

+0

없음을 할 것; 그건 효과가 없을거야. http://blog.slaks.net/2013-07-22/thread-safe-data-structures/ – SLaks

답변

1

아니, 내가 추측하는 인스턴스를 잠 그려면 동기화 할 필요가 없습니다.

AtomicInteger는

은 분명히이 SO Does AtomicBoolean not have a negate() method? 해당 페이지의 솔루션은 흥미 롭다 이전에 질문을 받았다 ... getAndSet에 방법이지만 역을 할 수있는 것도 많이있다.

0

현재 값을 1만큼 원자 적으로 감소시킵니다. 이전 값을 반환하는 것은

AtomicInteger itsCounter = new AtomicInteger(); 
itsCounter.getAndDecrement(); 
+0

을 참조하십시오. 감사하지만 실제로 값을 감소시키지 않고 값을 감소시키지 않기를 요청했습니다. – mindreader

4

나는 이런 식

public int getAndNegate(AtomicInteger i) { 
    for (;;) { 
     int current = i.get(); 
     int next = -current; 
     if (i.compareAndSet(current, next)) 
      return current; 
    } 
}