美文网首页js css html
java 原子类的CompareAndSet方法

java 原子类的CompareAndSet方法

作者: flyjar | 来源:发表于2023-04-02 16:23 被阅读0次

CompareAndSet :通俗来说,就是比较ok,就set,否则就不set。

它是比synchronouse同步锁效率更高的一种cas乐观锁。

它是原子类AtomicBoolean下的方法。

所谓比较ok,就更新,否则不更新:这里就有两个比较值A和B,更新值C。

例如:A:是存线程中的一个值。B是比较值,C是更新值。

粗略用下图理解:如果线程1和线程2同时调用CompareAndSet方法,更新变量C的值,那现在线程1本地存临时值为10与内存的值10,比较是否相等,符合更新标准,则将内存中的变量C更新为11,返回true。

那线程2使用线程存储的临时变量12去与内存变量C的值10比较,不符合更新标准,则更新失败,返回fasle。


534e7389f9d64213963876eaf4dc0e25.png

compareAndSet 源码注释:

/**
 * Atomically sets the value to the given updated value
 * if the current value {@code ==} the expected value.
 *
 * @param expect the expected value
 * @param update the new value
 * @return {@code true} if successful. False return indicates that
 * the actual value was not equal to the expected value.
 */
public final boolean compareAndSet(boolean expect, boolean update) {
    int e = expect ? 1 : 0;
    int u = update ? 1 : 0;
    return unsafe.compareAndSwapInt(this, valueOffset, e, u);
}

我理解:this和valueOffset可以获取内存变量C的实际值,调用线程修改时expect和变量C一致,则说明当前没有线程修改过变量C,则符合更新条件,将update赋值到变量C。

相关文章

  • scala 调用java通过父类调用子类方法实现

    scala 调用java通过父类调用子类方法实现 java 父类 A 抽象类: java 子类 B 继承A类,并...

  • java 继承 子类强转父类 父类强转子类

    Java 继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法...

  • Java 面向对象

    JAVA继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,...

  • Java自学-接口与继承 隐藏

    Java中的方法隐藏 与重写类似,方法的重写是子类覆盖父类的对象方法 隐藏,就是子类覆盖父类的类方法 步骤 1 :...

  • Java - 可重入锁ReentrantLock实现原理

    Java - 可重入锁ReentrantLock实现原理 在实现层面除了依赖于CAS(compareAndSet)...

  • java相关

    1、Java向上转型之后调用子类的同名变量/方法的问题 总结:方法可重写,属性不可重写。父类的方法被子类覆盖,父类...

  • java第一个月月考基础知识点整理

    一Java 1.Java继承子类会继承父类的属性 构造器 方法。但是private的属性虽然会被子类继承,但是只是...

  • AtomicStampedReference 注意事项 2019

    以下是AtomicStamedReference中compareAndSet方法的源码 从上述源码可知refere...

  • Java几个基本概念

    多态:通过父类指针调用子类方法 重载:一个类中方法参数名、个数、类型不同 重写:子类对父类方法的重写 Java泛型...

  • Java07继承

    继承 关键字extends子类继承父类,子类拥有父类的成员变量和方法。Java中所有的类最终都继承与java.lo...

网友评论

    本文标题:java 原子类的CompareAndSet方法

    本文链接:https://www.haomeiwen.com/subject/fkdkddtx.html