开始之前先说下AtomicInteger类中的几个成员
private static final Unsafe unsafe = Unsafe.getUnsafe(); //Unsage是Java中用来直接对内存进行管理的一个对象
private static final long valueOffset; //偏移量,存储数据的内存地址就是对象+偏移量来获取的
private volatile int value; //用来获取valueOffset的偏移地址,可通过偏移地址直接获取这个值
//demo
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(5);
System.out.println(atomicInteger.compareAndSet(5, 100) + "\t current data:" + atomicInteger.get()); //true current data:100
System.out.println(atomicInteger.compareAndSet(5, 200) + "\t current data:" + atomicInteger.get());//false current data:100
}
//源码
/*
*
* expect 期望的值
* update 更新的值
*
*/
public final boolean compareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}
/*
*
* compareAndSwapInt这个是本地方法,作用是通过对象和偏移地址获取value后与期望值expect比较
* 如果相等将内存中的值替换为update
*/
public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);
Rick
78浏览
0评论
2020-10-12