Juc14_CAS的概述、Unsafe类的原理、CAS缺点、ABA问题如何解决(上)

简介: ①. CAS的概述?②. UnSafe类

①. CAS的概述?


①. CAS的全称为Compare-And-Swap ,它是一条CPU并发原语,比较工作内存值(预期值)和主物理内存的共享值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止。这个过程是原子的


(AtomicInteger类主要利用CAS(compare and swap)+volatile和native方法来保证原子操作,从而避免synchronized的高开销,执行效率大为提升)


image.png



②. CAS并发原语提现在Java语言中就是sun.misc包下的UnSaffe类中的各个方法.调用UnSafe类中的CAS方法,JVM会帮我实现 CAS汇编指令. 这是一种完全依赖于硬件 功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许中断,也即是说CAS是一条原子指令,不会造成所谓的数据不一致的问题


③. 关于unSafe.getAndIncrement()方法的分析


微信图片_20220108130537.png


④. 代码展示


  /*
  * CAS:Compare and swap [比较并交换]
  * */
  public class AtomicIntegerDemo {
      public static void main(String[] args) {
          AtomicInteger atomicInteger=new AtomicInteger(5);
          //true 2019
          System.out.println(atomicInteger.compareAndSet(5, 2019)+"\t"+atomicInteger.get());
          //false 2019
          System.out.println(atomicInteger.compareAndSet(5, 2222)+"\t"+atomicInteger.get());
      }
  }


②. UnSafe类


①. 是CAS的核心类,由于Java 方法无法直接访问底层 ,需要通过本地(native)方法来访问,UnSafe相当于一个后门,基于该类可以直接操作特定的内存数据.UnSafe类在于sun.misc包中,其内部方法操作可以向C的指针一样直接操作内存,因为Java中CAS操作依赖于UnSafe类的方法


注意:UnSafe类中所有的方法都是native修饰的,也就是说UnSafe类中的方法都是直接调用操作底层资源执行响应的任务


微信图片_20220108130616.png


②. 变量ValueOffset,便是该变量在内存中的偏移地址,因为UnSafe就是根据内存偏移地址获取数据的


微信图片_20220108130637.png


③. 变量value和volatile修饰,保证了多线程之间的可见性


微信图片_20220108130654.png

相关文章
|
10月前
|
Java 编译器
解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略
解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略
|
2月前
|
安全 Java 编译器
Java 多线程系列Ⅴ(常见锁策略+CAS+synchronized原理)
Java 多线程系列Ⅴ(常见锁策略+CAS+synchronized原理)
|
12天前
|
Java 索引
JUC中的原子操作类及其原理
JUC中的原子操作类及其原理
|
21天前
|
安全 Java
并发编程-Java如何实现原子操作(CAS或锁)
并发编程-Java如何实现原子操作(CAS或锁)
8 0
|
2月前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
21 0
|
2月前
|
存储 安全 Java
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(上)
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)
48 0
|
2月前
|
存储 安全 Java
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(下)
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(下)
49 0
|
9月前
|
缓存 安全 算法
JUC第四讲:Java中的锁/CAS原理与案例分析(上)
JUC第四讲:Java中的锁/CAS原理与案例分析
JUC第四讲:Java中的锁/CAS原理与案例分析(上)
|
9月前
|
缓存 算法 安全
JUC第四讲:Java中的锁/CAS原理与案例分析(下)
JUC第四讲:Java中的锁/CAS原理与案例分析
|
安全 Java 编译器
【JavaEE】多线程进阶问题-锁策略and死锁,CAS操作,Synchronized原理
JavaEE & 多线程进阶问题 & 锁策略and 死锁,CAS操作,Synchronized原理
46 0