美文网首页
原子操作CAS

原子操作CAS

作者: 策马踏清风 | 来源:发表于2020-08-18 21:17 被阅读0次

    Atom不可分割的意思,CAS是一种替换操作,不是锁。

    一、原子操作

    1.1sync的缺点

    1. 基于阻塞机制
    2. 被阻塞的线程优先级很高
    3. 拿到锁的线程不释放
      4.大量竞争消耗cpu带来死锁等问题

    1.2 CAS原理

    1. 基于指令级别保证是原子操作
    2. 基本思路:如果内存地址的值和期望值相等,就把新的值赋给此内存地址,否则不进行操作
    3. 在循环中不断进行CAS操作,直到成功(自旋)。

    1.3 ABA问题

    • A被改成了B又被改回了A。对于一个线程来说,检测到值为A就以为没有改动过,其实有可能是再次被改回来了。
    • 解决方法是加上版本号。

    1.4 性能问题

    • 如果长期不成功,cpu会不断循环

    1.5 常用工具

    类型 jdk类 备注
    基本类型 AtomicBoolean AtomicInteger AtomicLong 常用getAndIncrement()先获取后累加,incrementAndGet()先累加再获取之类的方法。
    数组 AtomicIntegerArray AtomicLongArray AtomicReferenceArray 可以理解为数组的引用类型
    引用类型 AtomicReference AtomicMarkableReference AtomicStampedReference AtomicReference包装一个类,然后调用compareAndSet进行原子操作替换成另一个类。可以进行整个类的CAS原子操作。另外两个主要关系ABA问题,mark关心是否被动过,stamped关心动过几次
    原子更新字段类 AtomicReferenceFieldUpdater AtomicIntegerFieldUpdater AtomicLongFieldUpdater 比较麻烦,可以用上一个替代

    相关文章

      网友评论

          本文标题:原子操作CAS

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