> Java > java지도 시간 > AtomicInteger의 decrementAndGet 메서드 소개(코드 포함)

AtomicInteger의 decrementAndGet 메서드 소개(코드 포함)

不言
풀어 주다: 2019-02-21 14:56:06
앞으로
4597명이 탐색했습니다.

이 글은 AtomicInteger의 decrementAndGet 메소드(코드 포함)를 소개합니다. 이는 특정 참조 값을 가지고 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

unsafe.objectFieldOffset

unsafe.objectFieldOffset을 호출하여 객체의 값 필드 오프셋을 가져옵니다(실제로 필드를 빠르게 찾을 수 있는 필드에서 객체 헤드까지의 오프셋)

static {
    try {
        valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));
    } catch (Exception ex) { 
        throw new Error(ex); 
    }
}
로그인 후 복사

다중 스레드에서 값의 가시성을 보장하기 위해 값을 휘발성 유형으로 정의합니다

private volatile int value;
로그인 후 복사

decrementAndGet

unsafe.getAndAddInt를 호출합니다. 매개변수는 현재 개체, 오프셋 및 작업 값입니다

/**
 * Atomically decrements by one the current value.
 *
 * @return the updated value
 */
public final int decrementAndGet() {
    //最后-1是由于getAndAddInt获取的值为交换前的值
    return unsafe.getAndAddInt(this, valueOffset, -1) - 1;
}
로그인 후 복사

getAndAddInt

By CompareAndSwapInt 최신 메모리 값을 가져오기 위해 getIntVolatile 루프로 돌아갑니다

public final int getAndAddInt(Object var1, long var2, int var4) {
    int var5;
    do {
        var5 = this.getIntVolatile(var1, var2);
    } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
    return var5;
}
로그인 후 복사

getIntVolatile

이 메서드에는 현재 객체와 오프셋이라는 두 개의 매개변수가 포함되어 있으며 메모리 주소가 가리키는 정수를 가져오고 휘발성 의미를 지원합니다

public native int getIntVolatile(Object var1, long var2);
로그인 후 복사

CompareAndSwapInt

메서드에는 현재 개체, 오프셋, 예상 값, 새 값의 네 가지 매개 변수가 포함됩니다. 현재 개체에 해당하는 오프셋 값이 예상 값과 동일하면 현재 개체의 값을 새 개체로 변경합니다. 값을 입력하고 true를 반환합니다. 그렇지 않으면 false를 반환합니다

public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);
로그인 후 복사

위 내용은 AtomicInteger의 decrementAndGet 메서드 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿