atomic分析 AtomicFloat

文章目录

粗暴一些,直接分析源码了

以下几个方法着重体现了,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) {
// 深度思考,这边为什么使用count = newValue
// 因为"count = newValue"会插入storeLoad屏障
// 而putOrderedInt插入的是storeStore屏障
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()函数。