java Unsafe类的compareAndSwap方法
compareAndSwap是个原子方法,原理是cas.就是说如果他是xx,那么就改为xxx.
这个是高效,而且是原子的,不用加锁.
也不用但是其他值改了而产生误操作,应为会先判断当前值,符合期望才去改变.
直接上代码吧
结果是:
fieldName:fieldOffset
intParam:12
longParam:16
strParam:24
strParam2:28
原始值是:3
true
改变之后的值是:10
false
true
compareAndSwapInt是通过反射根据字段偏移去修改对象的.
可以看到int是4个字节的偏移量,long是4个字节的偏移量,string是4个字节的偏移量
注意 Unsafe的对象不能直接new,要通过反射去获取.