CAS

135 阅读1分钟

cas+volatile 是juc包的基石

    // var1:对象 var2:对象属性在对象中的offset var4:newValue
    public final Object getAndSetObject(Object var1, long var2, Object var4) {
        // 结合下面的循环来看,如果修改失败就拿取一遍新的值
        Object var5;
        do {
            var5 = this.getObjectVolatile(var1, var2);
        } while(!this.compareAndSwapObject(var1, var2, var5, var4));

        return var5;
    }