>  기사  >  Java  >  AtomicInteger의 decrementAndGet 메서드 소개(코드 포함)

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

不言
不言앞으로
2019-02-21 14:56:064499검색

이 글은 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으로 문의하시기 바랍니다. 삭제