1、getAndIncrement 方法
底层使用了unsafe.getAndAddInt(object,offset,deta)
int getAndAddInt(Object,offset,int deta){
int v ;
do{
v = unsafe.getIntVolatile(object,offset);
}while(!unsafe.compareAndSet(object,offset,v,v+1))
return v;
}
2、incrementAndGet()方法
同样使用了unsafe类的getAndInt()
与getAndIncrement()一样,只不过在返回值+1;
3、compareAndSet方法
底层使用unsafe类的compareAndSet(obj,offset,expect,update); 返回类型是布尔值
补充unsafe类只能由Boot classLoader 加载
所以如果非jdk类库使用 初始化应该利用反射
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Unsafe unsafe = (Unsafe) theUnsafe.get(null);
本文解析了Java中getAndIncrement、incrementAndGet和compareAndSet方法的工作原理,重点讲解了Unsafe类在原子操作中的应用,以及如何通过反射初始化非JDK库。展示了底层内存操作和并发控制的关键技术。
1342

被折叠的 条评论
为什么被折叠?



