<aside> 💡 CAS是一种无锁的非阻塞算法,全称为:Compare-and-swap(比较并交换),大致思路是:先比较目标对象现值是否和旧值一致,如果一致,则更新对象为新值;如果不一致,则表明对象已经被其他线程修改,直接返回。

</aside>

底层原理

执行函数:CAS(V,E,N)

自旋锁

unsafe类

<aside> 💡 Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力,同时也带来了指针的问题。

</aside>

通过下面的方法,可以获取对象中某个属性的内存偏移地址,然后可根据偏移地址直接对属性进行修改,属性是否可读都无所谓,都能修改。

public native long objectFieldOffset(Field f);

使用unsafe类进行操作数据。

Field name = user.getClass().getDeclaredField(“name”);
long nameOffset = unsafe.objectFieldOffset(name);
unsafe.putObject(user, nameOffset, “jim”);