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

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

不言
リリース: 2019-02-21 14:56:06
転載
4627 人が閲覧しました

この記事では、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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート