文章目录
粗暴一些,直接分析源码了
以下几个方法着重体现了,AtomicInteger主要是调用Unsafe实现的,具体请看Unsafe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
public class extends Number implements java.io.Serializable { private static final long serialVersionUID = 6214790243416807050L; private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset;
static { try { valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("value")); } catch (Exception ex) { throw new Error(ex); } }
private volatile int value;
public final void lazySet(int newValue) { unsafe.putOrderedInt(this, valueOffset, newValue); }
public final int getAndAdd(int delta) { return unsafe.getAndAddInt(this, valueOffset, delta); }
public final int incrementAndGet() { return unsafe.getAndAddInt(this, valueOffset, 1) + 1; }
public final int decrementAndGet() { return unsafe.getAndAddInt(this, valueOffset, -1) - 1; }
public final int addAndGet(int delta) { return unsafe.getAndAddInt(this, valueOffset, delta) + delta; } }
|
AtomicFloat
实现可以使用Float.floatToIntBits()
函数。
近期评论