자바 병렬 프로 그래 밍: 스 레 드 보안 관리 클래스 - 원자 작업 클래스 - AtomicReference FieldUpdater

4640 단어
1. 클래스 AtomicReferenceFieldUpdater < T, V >
public abstract class AtomicReferenceFieldUpdater<T,V>extends Object

반 사 된 유 틸 리 티 도 구 를 기반 으로 지정 한 클래스 의 지정 volatile 필드 를 원자 업데이트 할 수 있 습 니 다.이 종 류 는 원자 데이터 구조 에 사용 되 는데 이 구조 에서 같은 노드 의 몇 개의 인용 필드 는 모두 독립 적 으로 원자 업데이트 에 의 해 제어 된다.예 를 들 어 트 리 노드 는
 class Node {
   private volatile Node left, right;

   private static final AtomicReferenceFieldUpdater leftUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
   private static AtomicReferenceFieldUpdater rightUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");

   Node getLeft() { return left;  }
   boolean compareAndSetLeft(Node expect, Node update) {
     return leftUpdater.compareAndSet(this, expect, update);
   }
   // ... and so on
 }
 

이러한 중 compareAndSet 방법의 보증 은 다른 원자 류 에서 이 방법의 보증 보다 약 하 다 는 것 을 주의 하 세 요.이 는 모든 필드 가 원자 접근 목적 에 적합 하도록 확보 할 수 없 기 때문에 compareAndSetset 의 다른 호출 에 대해 서 는 원자 성과 가 변 적 인 의미 만 보장 할 수 있다.
2. 구조 함수 상세 설명
AtomicReferenceFieldUpdater
protected AtomicReferenceFieldUpdater()

보 호 된 무 조작 구조 방법 으로 하위 클래스 에 사용 할 수 있 습 니 다.
3. 방법 상세 설명
newUpdater
public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass,
                                                                Class<W> vclass,
                                                                String fieldName)

주어진 필드 를 대상 으로 업데이트 기 를 만 들 고 되 돌려 줍 니 다.반사 형식 이 일반 형식 과 일치 하 는 지 Class 매개 변수 가 필요 합 니 다.
 
인자:tclass - 필드 를 유지 하 는 대상 클래스 입 니 다.vclass - 이 필드 의 클래스fieldName - 업데이트 할 필드 이름 입 니 다.
돌아 가기:
갱신 기
던 지기:IllegalArgumentException - 이 필드 가 가 변 인용 형식 이 아니라면.RuntimeException - 이 클래스 가 필드 를 유지 하지 않 거나 잘못된 유형 이 라면 Runtime Exception 과 포 함 된 반사 기반 이상 을 던 집 니 다.
compareAndSet
public abstract boolean compareAndSet(T obj,
                                      V expect,
                                      V update)

하면, 만약, 만약...== 예상 치 는 원자 방식 으로 이 업데이트 기 가 관리 하 는 주어진 대상 의 필드 를 주어진 업데이트 값 으로 설정 합 니 다.맞다.compareAndSetset 의 다른 호출 은 원자 성 을 확보 할 수 있 으 나 필드 의 다른 변경 에 대해 서 는 반드시 원자 성 을 확보 하 는 것 은 아니다.
 
인자:obj - 필드 의 대상 을 조건 부 로 설정expect - 예상 치update - 새 값
돌아 가기:
성공 하면 트 루 로 돌아 갑 니 다.
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj,
                                          V expect,
                                          V update)

하면, 만약, 만약...== 예상 치 는 원자 방식 으로 이 업데이트 기 가 관리 하 는 주어진 대상 의 필드 를 주어진 업데이트 값 으로 설정 합 니 다.맞다.compareAndSetset 의 다른 호출 은 원자 성 을 확보 할 수 있 으 나 필드 의 다른 변경 에 대해 서 는 반드시 원자 성 을 확보 하 는 것 은 아니다.
예상 치 못 하 게 실패 하고 정렬 보증 을 제공 하지 않 을 수 있 으 므 로 아주 적은 경우 에 만 compareAndSet 을 적 절 히 선택 할 수 있 습 니 다.
 
인자:obj - 필드 의 대상 을 조건 부 로 설정expect - 예상 치update - 새 값
돌아 가기:
성공 하면 트 루 로 돌아 갑 니 다.
set
public abstract void set(T obj,
                         V newValue)

이 업데이트 기 가 관리 하 는 주어진 대상 의 필드 를 주어진 업데이트 값 으로 설정 합 니 다.... 에 대하 여compareAndSet 의 후속 호출 은 가 변 저장 소 를 확보 할 수 있 습 니 다.
 
인자:obj - 필드 의 대상 을 설정 합 니 다.newValue - 새 값
lazySet
public abstract void lazySet(T obj,
                             V newValue)

최종 적 으로 이 업데이트 기 가 관리 하 는 주어진 대상 의 필드 를 주어진 업데이트 값 으로 설정 합 니 다.
 
인자:obj - 필드 의 대상 을 설정 합 니 다.newValue - 새 값
다음 버 전부터:
1.6
get
public abstract V get(T obj)

이 업데이트 기 가 관리 하 는 주어진 대상 의 필드 에서 현재 값 을 가 져 옵 니 다.
 
인자:obj - 필드 의 대상 가 져 오기
돌아 가기:
현재 값
getAndSet
public V getAndSet(T obj,
                   V newValue)

이 업데이트 기 가 관리 하 는 주어진 대상 의 필드 를 자동 으로 주어진 값 으로 설정 하고 이전 값 으로 되 돌려 줍 니 다.
 
인자:obj - 필드 의 대상 을 가 져 오고 설정 합 니 다.newValue - 새 값
돌아 가기:
이전 값

좋은 웹페이지 즐겨찾기