unsafe源码
compareAndSwapInt(obj,stateOffset,expect,update)
参数说明
a. obj 当前对象的引用,也就是当前对象的地址
b. 偏移量
c. 期望值
d. 更新值
执行步骤
计算变量的地址:
addr= *obj+stateOffset
加自旋锁
spinlock lock;
判断地址指向的值和期望的是否一样, 如果一样,把地址指向的值 修改为 更新值
if(result=(*addr == expect)){
*addr=update
}
return result;