Heim  >  Artikel  >  Java  >  Einführung in die decrementAndGet-Methode von AtomicInteger (mit Code)

Einführung in die decrementAndGet-Methode von AtomicInteger (mit Code)

不言
不言nach vorne
2019-02-21 14:56:064499Durchsuche

Der Inhalt dieses Artikels ist eine Einführung in die decrementAndGet-Methode von AtomicInteger (mit Code). Ich hoffe, dass er für Sie hilfreich ist.

unsafe.objectFieldOffset

Rufen Sie unsafe.objectFieldOffset auf, um den Offset des Wertfelds im Objekt abzurufen (tatsächlich den Offset von einem Feld zum Kopf des Objekts). übergeben Dieser Offset kann das Feld schnell finden)

static {
    try {
        valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));
    } catch (Exception ex) { 
        throw new Error(ex); 
    }
}

Definieren Sie den Wert als flüchtigen Typ, um die Sichtbarkeit des Werts in mehreren Threads sicherzustellen

private volatile int value;

decrementAndGet

Unsafe.getAndAddInt aufrufen, die Parameter sind das aktuelle Objekt, der Offset und der Operationswert

/**
 * 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

Rufen Sie den neuesten Speicherwert durch Rückgabe ab die Schleife getIntVolatile bis CompareAndSwapInt

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

Die Methode enthält zwei Parameter, das aktuelle Objekt und den Offset; ruft die Ganzzahl ab, auf die die Speicheradresse zeigt, und unterstützt flüchtig Semantik

public native int getIntVolatile(Object var1, long var2);

Die Methode compareAndSwapInt

enthält vier Parameter: das aktuelle Objekt, den Offset, den erwarteten Wert und den neuen Wert, wenn der Wert des Offsets dem aktuellen entspricht Wenn das Objekt mit dem erwarteten Wert übereinstimmt, wird der Wert des aktuellen Objekts in den neuen Wert geändert und gibt „true“ zurück. Andernfalls wird „false“ zurückgegeben

public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);

Das obige ist der detaillierte Inhalt vonEinführung in die decrementAndGet-Methode von AtomicInteger (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen