chapter15_原子变量与非阻塞同步机制_2_硬件对并发的支持

博客介绍了独占锁synchronized是悲观技术,重点讲解了CAS技术。CAS即Compare and Swap,是乐观技术,包含3个操作数,通过原子方式操作。还给出使用示例,分析其优缺点,最后提到JVM对CAS的支持,如原子变量类等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 独占锁synchronized是一项__悲观__技术, 它假设最坏的情况

  • CAS

    (1) 全名 Compare and Swap

    (2) 是一项__乐观__技术

    (3) CAS包含__3个__操作数

    1° 需要读写的内存位置V

    2° 进行比较的值A

    3° 准备写入内存的新值B

    (4) 具体操作

    当且仅当位置V的值等于A时, CAS才会通过__原子方式__将B写入V的位置, 否则不执行任何操作;

    无论V的值是否等于A, 都返回V原有的值

    (5) 含义

    认为V的值应该是A, 如果是就更新V的值为B; 如果不是就啥也不干并且告诉你本来V的值是多少

    (6) 使用示例: 非阻塞的计数器

      @ThreadSafe
      public class CasCounter {
    
          private SimulatedCAS value;
    
          public int getValue() {
    
              return value.get();
          }
    
          public int increment() {
    
              int v;
      
              do {
                  v = value.get();
              } while (v != value.compareAndSwap(v, v + 1));
    
              return v + 1;
          }
      }
    

    在increment函数中, 首先会获取内存V处的值, 然后进行CAS操作: 如果获取到的值和v相等说明没有其他线程干扰, 因此可以更改V处的值; 否则就重复while循环

  • CAS的__优点__: 在竞争程度不高时, 性能远远超过锁的方式

    CAS的__缺点__: 调用者需要手动决定发生竞争时的策略(重试or回退or放弃)

  • JVM对CAS的支持

    (1) __原子变量类__使用了底层的JVM支持为数字类型和引用类型提供了一种高效的CAS操作

    (2) java.util.concurrent中的大多数类直接或间接的使用了这些原子变量类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值