前言
cas作为原子操作,或者叫乐观锁,在jdk源码中得到了非常广泛的应用,是理解jdk源码的基础,今天我们就来分享一下compareAndSwapInt方法。
1.compareAndSwapInt方法说明
public final native boolean compareAndSwapInt(Object var1, long var2,
int var4, int var5);
该方法共有四个参数,方法主要实现的作用是:从var1对象的起始指针移动var2位,如果该位置上存储的值等于var4,那么将该值修改成var5。
- var1:比较的对象
- var2:指针偏移量
- var4:条件值
- var5:新值
除了这个方法,像Unsafe中的compareAndSwapObject、compareAndSwapLong方法都是类似的作用。
2.getObjectVolatile方法说明
public native Object getObjectVolatile(Object var1, long var2);
该方法又两个参数,该方法的主要作用是:获取当前对象var1在该对象指定偏移量var2上的值
- var1:待计算的对象
- var2:在对象上的偏移量
除了这个方法,像Unsafe中的getIntVolatile、getBooleanVolatile、getByteVolatile、getShortVolatile、getCharVolatile、getLongVolatile、getFloatVolatile、getDoubleVolatile等方法都是类似的作用。
3.putObject方法说明
public native void putObject(Object var1, long var2, Object var4);
该方法有三个参数,该方法的主要作用是:修改对象var1上偏移var2后位置上的值为var4。
- var1:待修改的对象
- var2:偏移量
- var4:新值
除了这个方法,像Unsafe中的putBoolean、putByte、putChar、putLong、putFloat、putDouble等方法都是类似的作用。
4.objectFieldOffset方法说明
public native long objectFieldOffset(Field var1);
该方法只有一个参数,类型为Field,该方法的主要作用是:获取当前对象var1字段在该对象的偏移量
- var1:对象中的字段
获得该偏移量之后就可以通过compareAndSwapInt这个方法,原子修改var1的值。
5.结语
道阻且长,行则将至,行而不辍,未来可期,加油。
原创不易,如果你觉得文章不错,对你的进步有那么一点帮助,那么就给个小心心,如果觉得文章非常对你的胃口,那么欢迎你关注我,或者关注个人的微信公众号 程序猿每日分享,这里有资源,有内推,有和你志同道合的朋友,咱们一起打怪升级。