Home > Java > javaTutorial > Introduction to the decrementAndGet method of AtomicInteger (with code)

Introduction to the decrementAndGet method of AtomicInteger (with code)

不言
Release: 2019-02-21 14:56:06
forward
4630 people have browsed it

This article brings you an introduction to the decrementAndGet method of AtomicInteger (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

unsafe.objectFieldOffset

Call unsafe.objectFieldOffset to get the offset of the value field in the object (actually the offset from a field to the head of the object, passed This offset can quickly locate the field)

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

Define value as a volatile type to ensure the visibility of value in multiple threads

private volatile int value;
Copy after login

decrementAndGet

Call unsafe.getAndAddInt, the parameters are the current object, offset, and operation value

/**
 * Atomically decrements by one the current value.
 *
 * @return the updated value
 */
public final int decrementAndGet() {
    //最后-1是由于getAndAddInt获取的值为交换前的值
    return unsafe.getAndAddInt(this, valueOffset, -1) - 1;
}
Copy after login

getAndAddInt

Get the latest memory value by comparingAndSwapInt and returning to the loop 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;
}
Copy after login

getIntVolatile

The method contains two parameters, the current object and the offset; obtains the integer pointed to by the memory address and supports volatile semantics

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

compareAndSwapInt

The method contains four parameters, the current object, offset, expected value, and new value; if the value of the offset corresponding to the current object is the same as the expected value, the current object's The value is changed to the new value and returns true; otherwise returns false

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

The above is the detailed content of Introduction to the decrementAndGet method of AtomicInteger (with code). For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template