ホームページ >Java >&#&チュートリアル >AtomicInteger の decrementAndGet メソッドの紹介 (コード付き)
この記事では、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 サイトの他の関連記事を参照してください。