ホームページ >Java >&#&チュートリアル >AtomicInteger の decrementAndGet メソッドの紹介 (コード付き)

AtomicInteger の decrementAndGet メソッドの紹介 (コード付き)

不言
不言転載
2019-02-21 14:56:064612ブラウズ

この記事では、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

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

このメソッドには、現在のオブジェクトとオフセットという 2 つのパラメータが含まれており、メモリ アドレスが指す整数を取得し、揮発性セマンティクスをサポートします。

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

compareAndSwapInt

メソッドには、現在のオブジェクト、オフセット、期待値、および現在のオブジェクトに対応するオフセットの値の 4 つのパラメーターが含まれています。期待値と同じである場合、現在のオブジェクトの値は新しい値に変更され、true を返します。それ以外の場合は false

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

を返します。

以上がAtomicInteger の decrementAndGet メソッドの紹介 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。