이 작업은 원자적일 것인가, 아니면 데이터 경합이 발생할 수 있습니까?AtomicInteger의 중첩 된 메서드 호출도 Java에서 원자입니다.
atomicInteger.set(-atomicInteger.get());
데이터 경합이있는 경우 원자적인 방법으로 AtomicInteger
을 무효화하는 방법은 무엇입니까?
이 작업은 원자적일 것인가, 아니면 데이터 경합이 발생할 수 있습니까?AtomicInteger의 중첩 된 메서드 호출도 Java에서 원자입니다.
atomicInteger.set(-atomicInteger.get());
데이터 경합이있는 경우 원자적인 방법으로 AtomicInteger
을 무효화하는 방법은 무엇입니까?
아니, 내가 추측하는 인스턴스를 잠 그려면 동기화 할 필요가 없습니다.
AtomicInteger는
은 분명히이 SO Does AtomicBoolean not have a negate() method? 해당 페이지의 솔루션은 흥미 롭다 이전에 질문을 받았다 ... getAndSet에 방법이지만 역을 할 수있는 것도 많이있다.현재 값을 1만큼 원자 적으로 감소시킵니다. 이전 값을 반환하는 것은
AtomicInteger itsCounter = new AtomicInteger();
itsCounter.getAndDecrement();
을 참조하십시오. 감사하지만 실제로 값을 감소시키지 않고 값을 감소시키지 않기를 요청했습니다. – mindreader
나는 이런 식
public int getAndNegate(AtomicInteger i) {
for (;;) {
int current = i.get();
int next = -current;
if (i.compareAndSet(current, next))
return current;
}
}
없음을 할 것; 그건 효과가 없을거야. http://blog.slaks.net/2013-07-22/thread-safe-data-structures/ – SLaks