AtomicIntegerFieldUpdater — int 필드 원자 갱신 리플렉션 유틸리티
AtomicIntegerFieldUpdater — int 필드 원자 갱신 리플렉션 유틸리티
지정한 클래스의 지정된 volatile int 필드에 원자적 갱신을 가능하게 하는 리플렉션 기반 유틸리티예요.
본문
시그니처
public abstract class AtomicIntegerFieldUpdater<T> extends Object
타입 매개변수: T — 갱신 가능한 필드를 보유한 객체의 타입.
설명
지정한 클래스의 지정된 volatile int 필드에 원자적 갱신을 가능하게 하는 리플렉션 기반 유틸리티예요. 이 클래스는 같은 노드의 여러 필드가 각각 독립적으로 원자적 갱신 대상이 되는 원자 데이터 구조에서 사용하도록 설계되었어요.
참고로 이 클래스의 compareAndSet 메서드의 보장은 다른 원자 클래스의 것보다 약해요. 이 클래스는 필드의 모든 사용이 원자 접근 목적에 적절함을 보장할 수 없으므로, 같은 updater에서 compareAndSet과 set의 다른 호출에 대해서만 원자성을 보장할 수 있어요.
타입 T의 매개변수에 대해 newUpdater(java.lang.Class<U>, java.lang.String)에 전달된 클래스의 인스턴스가 아닌 객체 인자를 전달하면 ClassCastException이 던져져요.
저장 조건: 새 updater를 생성한 클래스의 필드는 volatile로 선언되어야 하고, 접근(access) 검사가 필드의 선언 클래스가 아닌 updater의 생성자에서 확인되므로 updater는 그 필드를 읽고 쓸 수 있어야 해요.
주요 메서드
newUpdater(Class<U> tclass, String fieldName)—tclass의fieldName과 일치하는 필드를 가진 updater를 만들고 반환해요.get(T obj)— 지정한 객체의 이 updater가 관리하는 필드의 현재 값을 반환해요.set(T obj, int newValue)— 지정한 객체의 이 updater가 관리하는 필드를 지정한 값으로 설정해요.getAndSet(T obj, int newValue)— 지정한 객체의 이 updater가 관리하는 필드를 지정한 값으로 원자적으로 설정하고 이전 값을 반환해요.compareAndSet(T obj, int expectedValue, int newValue)— 현재 값이expectedValue와 같으면 지정한 객체의 필드를newValue로 원자적으로 설정해요.getAndAdd(T obj, int delta)— 지정한 객체의 이 updater가 관리하는 필드의 현재 값에 지정한 값을 원자적으로 더하고 이전 값을 반환해요.addAndGet(T obj, int delta)— 지정한 객체의 이 updater가 관리하는 필드의 현재 값에 지정한 값을 원자적으로 더하고 갱신된 값을 반환해요.accumulateAndGet(T obj, int x, IntBinaryOperator accumulatorFunction)— 현재 값과 주어진 값에 주어진 함수를 적용한 결과로 필드를 원자적으로 갱신하고 갱신된 값을 반환해요.